2017-08-01 201 views
0

我正在阅读这篇文章。使用Visual Studio 2017构建源于Windows 10的Perl

http://www.cpan.org/src/README.htmlhttp://search.cpan.org/~rjbs/perl-5.16.0/README.win32#Building

我提取的文件:c:\Sources\perl-5.26.0\现在我想建立它。

我设置CCTYPE = MSVC141

我现在运行:

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2017\Visual Studio Tools\VC\x64 Native Tools Command Prompt for VS 2017 

后来:

C:\Sources\perl-5.26.0>win32\Makefile 
    'win32\Makefile' is not recognized as an internal or external command, 
    operable program or batch file. 

    C:\Sources\perl-5.26.0>nmake -f win32\Makefile 

    Microsoft (R) Program Maintenance Utility Version 14.10.25019.0 
    Copyright (C) Microsoft Corporation. All rights reserved. 

    NMAKE : fatal error U1073: don't know how to make 'config_H.vc' 
    Stop. 

    C:\Sources\perl-5.26.0> 

通过CMake:

mkdir c:\Sources\perl-5.26.0\bld 
cd /d c:\Sources\perl-5.26.0\bld 

cmake . -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX="c:\Custom\perl" -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo 
CMake Error: The source directory "C:/Sources/perl-5.26.0/bld" does not appear to contain CMakeLists.txt. 
Specify --help for usage, or press the help button on the CMake GUI. 

c:\Sources\perl-5.26.0\bld> 

对不起,我忘了检查是否存在: CMakeLists.txt文件

是否有可能建立的perl,而不是获得的ActivePerl下载(安装程序无法正常工作)草莓的Perl(该网站已经关闭)

请告诉我。

我该怎么定义这个变量:

MSVCDIR  = ??? 
CCHOME  = $(MSVCDIR) 
CCINCDIR = $(CCHOME)\include 
CCLIBDIR = $(CCHOME)\lib 

我的输出。

generate_uudmap.c 
     link -out:..\generate_uudmap.exe @C:\Users\...\AppData\Local\Temp\nmFB0B.tmp 
generate_uudmap.obj : error LNK2001: unresolved external symbol __imp_exit 
generate_uudmap.obj : error LNK2001: unresolved external symbol __imp_fputc 
generate_uudmap.obj : error LNK2001: unresolved external symbol __imp_fopen 
generate_uudmap.obj : error LNK2001: unresolved external symbol __imp___acrt_iob_func 
generate_uudmap.obj : error LNK2001: unresolved external symbol __imp_fclose 
generate_uudmap.obj : error LNK2001: unresolved external symbol __imp___stdio_common_vfprintf 
generate_uudmap.obj : error LNK2001: unresolved external symbol __imp__errno 
generate_uudmap.obj : error LNK2001: unresolved external symbol __imp_fputs 
generate_uudmap.obj : error LNK2001: unresolved external symbol __imp_strerror 
msvcrt.lib(exe_main.obj) : error LNK2001: unresolved external symbol _seh_filter_exe 
msvcrt.lib(exe_main.obj) : error LNK2001: unresolved external symbol _set_app_type 
msvcrt.lib(exe_main.obj) : error LNK2001: unresolved external symbol __setusermatherr 
msvcrt.lib(exe_main.obj) : error LNK2001: unresolved external symbol _configure_narrow_argv 
msvcrt.lib(utility.obj) : error LNK2001: unresolved external symbol _configure_narrow_argv 
msvcrt.lib(exe_main.obj) : error LNK2001: unresolved external symbol _initialize_narrow_environment 
msvcrt.lib(utility.obj) : error LNK2001: unresolved external symbol _initialize_narrow_environment 
msvcrt.lib(exe_main.obj) : error LNK2001: unresolved external symbol _get_initial_narrow_environment 
msvcrt.lib(exe_main.obj) : error LNK2001: unresolved external symbol _initterm 
msvcrt.lib(exe_main.obj) : error LNK2001: unresolved external symbol _initterm_e 
msvcrt.lib(exe_main.obj) : error LNK2001: unresolved external symbol exit 
msvcrt.lib(exe_main.obj) : error LNK2001: unresolved external symbol _exit 
msvcrt.lib(exe_main.obj) : error LNK2001: unresolved external symbol _set_fmode 
msvcrt.lib(exe_main.obj) : error LNK2001: unresolved external symbol __p___argc 
msvcrt.lib(exe_main.obj) : error LNK2001: unresolved external symbol __p___argv 
msvcrt.lib(exe_main.obj) : error LNK2001: unresolved external symbol _cexit 
msvcrt.lib(utility.obj) : error LNK2001: unresolved external symbol _cexit 
msvcrt.lib(exe_main.obj) : error LNK2001: unresolved external symbol _c_exit 
msvcrt.lib(exe_main.obj) : error LNK2001: unresolved external symbol _register_thread_local_exe_atexit_callback 
msvcrt.lib(exe_main.obj) : error LNK2001: unresolved external symbol _configthreadlocale 
msvcrt.lib(exe_main.obj) : error LNK2001: unresolved external symbol _set_new_mode 
msvcrt.lib(exe_main.obj) : error LNK2001: unresolved external symbol __p__commode 
msvcrt.lib(exe_main.obj) : error LNK2001: unresolved external symbol __C_specific_handler 
msvcrt.lib(utility.obj) : error LNK2001: unresolved external symbol __C_specific_handler 
msvcrt.lib(utility.obj) : error LNK2001: unresolved external symbol _seh_filter_dll 
msvcrt.lib(utility.obj) : error LNK2001: unresolved external symbol _initialize_onexit_table 
msvcrt.lib(utility.obj) : error LNK2001: unresolved external symbol _register_onexit_function 
msvcrt.lib(utility.obj) : error LNK2001: unresolved external symbol _execute_onexit_table 
msvcrt.lib(utility.obj) : error LNK2001: unresolved external symbol _crt_atexit 
msvcrt.lib(utility.obj) : error LNK2001: unresolved external symbol _crt_at_quick_exit 
msvcrt.lib(tncleanup.obj) : error LNK2001: unresolved external symbol __std_type_info_destroy_list 
msvcrt.lib(utility_desktop.obj) : error LNK2001: unresolved external symbol terminate 
msvcrt.lib(utility_desktop.obj) : error LNK2001: unresolved external symbol memset 
..\generate_uudmap.exe : fatal error LNK1120: 38 unresolved externals 
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\bin\HostX64\x64\link.EXE"' : return code '0x460' 
Stop. 

c:\Sources\perl-5.26.0\win32> 

回答

0

win32/Makefile不正式有支持使用Visual Studio 2017年构建但是,它确实有一个与2015年VS建筑之所以建设与Visual Studio 2015年工具需要一个单独的配置比与Visual Studio建设的支持2013工具与Visual Studio 2017工具相同,因此您可以使用相同的配置。

要做到这一点:

  • 开出“64位本机命令工具命令提示符为VS 2017年”从启动命令窗口。

  • 转到您在其中提取的Perl 5.26.0来源,并编辑win32/Makefile目录:

  • 集:

    CCTYPE  = MSVC140 
    
    ... 
    CCHOME  = C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017 
    CCINCDIR = $(CCHOME)\include 
    CCLIBDIR = $(CCHOME)\lib\x64 
    

    注意到CCHOME版本相关的目录。确保您使用的版本与您拥有的版本相对应。

  • 运行nmake<perl source directory>\win32。现在,我通常会做出一些更改,但这是进行构建所需的最少量更改。

  • 然后,nmake test,nmake install

注意,与Visual Studio 2015年和2017年建成perl S可最终是没有用处,因为它们与新的平台运行时OpenSSL将不与工作联系起来。我认为这意味着你不能使用模块LWPHTTP::Tiny等与https。我还没有调查过这么多,所以如果我错了,我很乐意去纠正。

请注意,当您安装Visual Studio 2017时,也会安装Visual Studio 2013工具,因此如果您可以使用某些bugs以及事实上默认情况下Perl的VS 2013构建配置忽略了VS 2013中包含的C99功能,或者如果你愿意手动编辑配置文件,我发现用它来构建更可靠。

一般来说,你最好用Strawberry Perl。如果您想使用依赖于C库的模块,使用MinGW工具链可以节省大量时间。

+1

非常感谢!!! !!!'CCTYPE = MSVC140' 我没想到...... –

+0

我们必须熟悉为什么早期的'perl's不能用Visual Studio 2015构建来知道这一点。我希望'perl'源代码没有抓住'stdio.h'数据结构的胆量,但它确实。 –

相关问题