c - 使用 Inline/C 从 Perl 调用外部 C 函数(在共享库中)不起作用
问题描述
该代码或多或少是从作者的页面中窃取的: https ://metacpan.org/pod/distribution/Inline-C/lib/Inline/C/Cookbook.pod 但没有给出预期的结果:
use Inline C => Config =>
enable => autowrap =>
LIBS => "-lmylib ";
use Inline C => <<'END_OF_C_CODE';
extern char *sharedFun(char *);
void greet(char* name) {
printf("Hello %s!\n", name);
}
char *func(char* name) {
static char mystr[1024];
char *p;
strcpy(mystr, "string: ");
p = sharedFun(name);
strcpy(mystr, p);
return(mystr);
}
END_OF_C_CODE
greet('Hello World');
greet(42);
$p = func("foobar");
print $p, "\n";
执行的结果是:
nm libmylib.so | grep shared
000000000000056a T sharedFun
file libmylib.so
libmylib.so: ELF 64-bit LSB shared object, x86-64, version 1 (FreeBSD), dynamically linked, not stripped
$ perl inline.pl
Hello Hello World!
Hello 42!
/usr/home/guru/Perl/_Inline/lib/auto/inline_pl_9404/inline_pl_9404.so: Undefined symbol "sharedFun"
我检查了:未搜索strace
共享库。libmylib.so
为什么?
解决方案
我认为 lib 已搜索但未找到,因此未加载符号。
从文档中,您可能能够提供库的路径:
LIBS => '-L/your/lib/path -lyourlib';
推荐阅读
- ios - Apple 审核拒绝,因为获取用户权限对话框本地化
- javascript - Select2 v4:从 Excel 表粘贴时在多选中选择选项
- python - Python 3.6 - 使用异步函数过滤
- java - 从 scala 控制台启动 scala uber-jar
- cmake - 如何从 cmake 运行 doxygen 文档生成
- javascript - 滚动时如何检测页面的一部分
- python - 如何告诉 shap 树解释器和 shap 值计算器哪些变量是分类的?
- java - 如何更改具有特定值的单元格的颜色?
- database - 在 redis 中搜索与给定模式不匹配的键
- php - 如何更改 PhpSpreadsheet 中保存文件的目录