问题描述
我正在使用 XS 创建一个使用 C 库的 Perl 模块。
出于测试目的,我创建了一个测试库,它有两个简单的功能:
void kzA() (does a simple printf) void kzB(int i,char *str) (does a printf of the received parameters)
我还在 XS 中创建了一些胶水,以便现在访问 kzA() 函数: (我只展示了函数本身,但包含也在 XS 中)
void ka() CODE: printf("Before kzA()\n"); kzA(); printf("After kzA()\n");
因此,我将测试库编译为 fc.so,它与我的 xs 文件和我的 Makefile.PL (/workspace/LirePivots) 位于同一目录中
在我的 Makefile.PL 中,我将 LIBS 键设置为 ['-L/workspace/LirePivots -l:fc.so'],但是当使用 perl (perl Makefile.PL) 执行它时,它显示“警告(几乎无害):没有找到 -l:fc.so 的库” 然后它编写一个没有提到所述库的 Makefile。然后,在编译(使用“make”)和安装(使用“sudo make install”)之后,当我运行从我的模块调用 ka() 函数的测试脚本时,我得到了“before”行,但是 kzA () 函数没有被调用,很明显,因为它找不到 kzA 符号,程序停在那里。
创建一个 C 测试程序,我将使用相同的参数链接(-l:fc.so -L/workspace/LirePivots)确实 工作,而且,只要我把路径在 LD_LIBRARY_PATH 中,它找到该函数并正确运行它。
我也尝试重命名库 libfc.so,并将 -l 部分更改为“-lfc”,但它也不起作用。它永远找不到图书馆。
有人知道我做错了什么吗?
编辑: 根据要求,我创建了一个最小示例:https://github.com/kzwix/xsTest 要运行它,您需要有一个装有 Perl 5 的 Linux 以及 XS(Redhat 上的 perl-devel 包)。还有一个 C 编译器,当然还有 make。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)