在C问题中嵌入perl

时间:2011-07-26 07:31:08

标签: perl dlopen

我有一个应用程序,它由很多共享库组成。我已经为其中一些人编写了perl扩展。此外,我已将perl嵌入到应用程序中。

我在C ++中调用了一个perl脚本。可以说,我的perl扩展名为SV :: Net :: Info和SV :: Interface,我的perl文件看起来像这样

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

我能够从C ++中读取perl脚本并将输出发送回C ++而不会出现任何问题。当我取消注释第三行时出现问题,use IO::Socket;我收到错误消息说

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.)

这是因为IO本身就是一个C库。我已按照here添加了xs-glue。它没有解决我的问题,因为添加的胶水正在寻找boot_IO符号(在IO.so文件中定义)。我无法将我的应用程序与IO.so链接,因为它是一个文件,perl在运行时打开,使用dlopen。 (另外,我的应用程序应该在Windows上工作,而windows只提供.dll文件而不提供.lib文件)。出路是什么?

我正在考虑编写一个包装函数boot_IO,它在运行时使用dlopen从IO.so运行实际的boot_IO函数。这是唯一的选择吗?

1 个答案:

答案 0 :(得分:1)

听起来你需要静态链接IO::Socket的库,并且,因为没有创建.a文件,看起来这是不可能的。您可以更改代码以使用内置套接字功能吗?

另一种选择是创建IO::Socket的纯Perl实现。

相关问题