2014-11-02 5 views
4

Windows 7에서 인라인 :: 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. 

펄 파일

use Inline C => <<'END_C'; 

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

greet; 

답변

1

bufferoverflowU는 펄 라이브러리가 아닌 매우 간단합니다. 그것은 최신 버전에는 포함되어 있지 않지만 Windows SDK의 일부입니다. 추측 해 보면 ActivePerl을 사용하고 PPM을 사용하여 인라인 :: C를 설치했습니다. Inline :: C의 복사본은 빌드 컴퓨터에있는 Windows SDK 버전에 관계없이 빌드되었습니다. 하지만 당신은 당신의 컴퓨터에 더 새로운 SDK를 갖고있는 것처럼 보입니다.

Inline::C tarball을 다운로드하여 자신의 컴퓨터에 구축 할 수 있습니다. 이렇게하면 Inline :: C의 이전 사본을 대체하고 잘하면 작동합니다.

+0

배경 덕분에 tobyink에게 감사드립니다. perl 5.16 용 PPM은 인라인 :: C를 지원하지 않으므로 tarball을 다운로드하고 직접 설치해야했습니다. 잘 됐어. 유일한 문제는 컴파일 오류입니다. SDK 설치를 시도합니다. – packetie

관련 문제