gpt4 book ai didi

使用 Inline/C 从 Perl 调用外部 C 函数(在共享库中)不起作用

转载 作者:太空狗 更新时间:2023-10-29 15:28:15 24 4
gpt4 key购买 nike

代码或多或少是从作者的页面上偷来的: 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。为什么?

最佳答案

我认为已搜索该库但未找到,因此未加载符号。

从文档中您可以提供库的路径:LIBS => '-L/your/lib/path -lyourlib';

关于使用 Inline/C 从 Perl 调用外部 C 函数(在共享库中)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53117515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com