尝试在 Windows 7 上运行 Inline::C(使用 active perl 5.14),遇到一些错误。不确定在哪里安装库“bufferoverflowU”。真的需要吗?
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;
最佳答案
bufferoverflowU
不是 Perl 库。它是 Windows SDK 的一部分,但未包含在最新版本中。猜测,您使用的是 ActivePerl,并使用他们的 PPM 安装了 Inline::C。他们的 Inline::C 副本将针对他们在构建机器上拥有的任何版本的 Windows SDK 构建。但是您的机器上似乎有更新的 SDK。
您可以尝试下载最新的 Inline::C tarball 并在您自己的机器上构建它。这有望取代您旧的 Inline::C 副本,并有望成功。
关于perl - 运行 Inline::C 时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26695282/