2017-08-01 46 views
0

私はこの記事を読んでいました。Visual Studioを使用してWindows 10のソースからPerlをビルドする2017

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 

以降:

CMAKEで
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> 

:私はの存在をチェックすることを忘れ

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年のツールは、Visual Studioで構築するよりも個別の設定が必要にVisual StudioにVS 2015で理由の建物を構築するためのサポートを持っています2013ツールはVisual Studio 2017ツールと同じですので、同じ設定を使用できます。そうするには

  • [スタートからのコマンドウィンドウ "のx64ネイティブ・コマンド・ツールは、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

彼らはOpenSSLが動作しません、新しいプラットフォームのランタイムとリンクするためのVisual Studio 2015および2017で構築されたperl sが、むしろ無用になってしまうことがあります。これは、LWP、などのモジュールをhttpsと一緒に使用できるようにならないことを意味します。私はこれをたくさん調べていないので、間違っていれば訂正したいと思う。

Visual Studio 2017のインストール時にVisual Studio 2013ツールもインストールされるため、特定のbugsで生活できれば、VS 2013のPerlのビルド設定ではデフォルトでVS 2013に含まれるC99機能が無視されるあなたがconfigファイルを手で編集したいと思えば、私はそれを使ってより信頼性の高いビルドを見つけました。

一般に、Strawberry Perlを使用する方がよいでしょう。 MinGWツールチェーンを使用すると、Cライブラリに依存するモジュールを使用する場合に多くの時間を節約できます。

+1

ありがとう、 'CCTYPE = MSVC140' 私はそれを考えていませんでした。 –

+0

以前の' perl'sがなぜそれを知るためにVisual Studio 2015でビルドされないのかよく知っていなければなりません。私は、 'perl'ソースが' stdio.h'データ構造を取得していないことを望みます。 –

関連する問題