2014-11-02 68 views
4

試圖在Windows 7上運行Inline :: C(使用活動的perl 5.14),出現了一些錯誤。不確定在哪裏安裝庫「bufferoverflowU」。它真的需要嗎?運行內聯錯誤:: C

perl te.pl 
Set up gcc environment - 4.8.2 
C:\Perl64\bin\perl.exe C:\Perl64\lib\ExtUtils\xsubpp -typemap "C:\Perl64\lib\ExtUtils\typemap" te1_pl_1114.xs > te1_pl_1114.xsc && C:\Perl64\bin\perl.exe -MExtUtils::Command -e "mv" -- te1_pl_1114.xsc te1_pl_1114.c 
c:/WINBUI~1/bin/gcc.exe -c -I"C:/winbuild64/test" -DNDEBUG -DWIN32 -D_CONSOLE -DNO_STRICT -DWIN64 -DCONSERVATIVE -DPERL_TEXTMODE_SCRIPTS -DUSE_SITECUSTOMIZE -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -DHASATTRIBUTE -fno-strict-aliasing -mms-bitfields -O2 -DVERSION=\"0.00\" -DXS_VERSION=\"0.00\" "-IC:\Perl64\lib\CORE" te1_pl_1114.c 
Running Mkbootstrap for te1_pl_1114() 
C:\Perl64\bin\perl.exe -MExtUtils::Command -e "chmod" -- 644 te1_pl_1114.bs 
C:\Perl64\bin\perl.exe -MExtUtils::Mksymlists \ 
    -e "Mksymlists('NAME'=>\"te1_pl_1114\", 'DLBASE' => 'te1_pl_1114', 'DL_FUNCS' => { }, 'FUNCLIST' => [], 'IMPORTS' => { }, 'DL_VARS' => []);" 
Set up gcc environment - 4.8.2 
dlltool --def te1_pl_1114.def --output-exp dll.exp 
c:\WINBUI~1\bin\g++.exe -o blib\arch\auto\te1_pl_1114\te1_pl_1114.dll -Wl,--base-file -Wl,dll.base -mdll -L"C:\Perl64\lib\CORE" te1_pl_1114.o C:\Perl64\lib\CORE\perl514.lib -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32 -lbufferoverflowU -lmsvcrt dll.exp 
c:/winbui~1/bin/../lib64/gcc/x86_64-w64-mingw32/4.8.2/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lbufferoverflowU 
collect2.exe: error: ld returned 1 exit status 
dmake.exe: Error code 129, while making 'blib\arch\auto\te1_pl_1114\te1_pl_1114.dll' 

A problem was encountered while attempting to compile and install your Inline 
C code. The command that failed was: 
    C:\Perl64\site\bin\dmake.exe > out.make 2>&1 

The build directory was: 
C:\winbuild64\test\_Inline\build\te1_pl_1114 

To debug the problem, cd to the build directory, and inspect the output files. 

at te1.pl line 6 
    ...propagated at C:/Perl64/site/lib/Inline/C.pm line 798. 
BEGIN failed--compilation aborted at te1.pl line 6. 

Perl的文件非常簡單

use Inline C => <<'END_C'; 

void greet() { 
     printf("Hello, world\n"); 
} 
END_C 

greet; 

回答

1

bufferoverflowU不是一個Perl庫。它是Windows SDK的一部分,但未包含在最新版本中。猜測,您正在使用ActivePerl,並使用其PPM安裝Inline :: C。他們的Inline :: C副本將針對他們在構建機器上具有的任何版本的Windows SDK而構建。但是你的機器似乎有一個更新的SDK。

您可以嘗試下載最新的Inline::C tarball並將其構建在您自己的機器上。這將有望替換您的Inline :: C的舊副本,並希望工作。

+0

感謝tobyink的背景。 perl 5.16的PPM不支持Inline :: C,所以我不得不下載tarball並自己「安裝」它。進展順利。唯一的問題是編譯錯誤。將嘗試安裝SDK。 – packetie 2014-11-03 04:39:54