2011-07-26 3 views
2

나는 꽤 많은 공유 라이브러리로 구성된 응용 프로그램을 가지고있다. 나는 그 중 일부에 펄 확장을 작성했다. 또한 perl을 응용 프로그램에 임베드했습니다.Perl을 C 질문에 포함하기

저는 C++에서 perl 스크립트를 호출하고 있습니다. 내 펄 확장이 SV :: 순 :: 정보 및 SV :: 인터페이스로 명명하고 내 펄 파일 내가 C에서 펄 스크립트를 읽어 ++ 및 보낼 수있어이

use SV::Net::Info; 
use SV::Interface; 
#use IO::Socket; 
... 
... 
... 

처럼 찾고, 말을 할 수있는 어떤 문제없이 C++로 다시 출력 할 수 있습니다. 내가 IO 자체가 C 라이브러리 때문이다

Can't load module IO, dynamic loading not available in this perl. 
(You may need to build a new perl executable which either supports 
dynamic loading or has the IO module statically linked into it.) 

한다는 오류 메시지가지고있어 세 번째 줄, use IO::Socket;의 주석 때 문제가 발생한다. 나는 xs-glue를 here과 같이 추가했습니다. 추가 된 접착제가 IO_SO 파일에 정의 된 boot_IO 기호를 찾고 있으므로 문제를 해결하지 못했습니다. Idle과 응용 프로그램을 연결할 수 없습니다. 파일은 dlopen을 사용하여 런타임에 perl이 열 때 사용합니다. (또한, 내 응용 프로그램은 Windows에서 작동해야하며 .dll 파일과 .lib 파일 만 제공합니다.) 나가는 길은 무엇입니까?

dlopen을 사용하여 런타임시 IO.so에서 실제 boot_IO 함수를 실행하는 wrapper 함수 boot_IO를 작성하려고합니다. 이것이 유일한 옵션입니까?

+0

http://www.perlmonks.org/?node_id=916694에서 PerlMonks로 크로스 포킹 – DavidO

+0

* * dlopen 지원을 사용하는 동적 libperl에 대해서만 링크 할 수 있습니까? – hobbs

답변

1

IO::Socket의 라이브러리를 정적으로 링크해야하며, .a 파일이 생성되지 않았으므로 불가능한 것처럼 보입니다. 내장 된 소켓 함수를 사용하도록 코드를 변경할 수 있습니까?

또 다른 옵션은 IO::Socket의 순수한 Perl 구현을 만드는 것입니다.

관련 문제