gpt4 book ai didi

raku - NativeCall 加载我不调用的库符号

转载 作者:行者123 更新时间:2023-12-01 12:15:13 24 4
gpt4 key购买 nike

我有两个库,我想调用第一个库中的例程,然后它们调用第二个库中的例程,但由于这些符号未定义而崩溃。即使我不想调用它们,是否可以从库 XX 中说“加载这些符号”?

teSTLib1.c:

#include <stdio.h>
void sub2();
void sub1() {
printf("Called sub1\n");
sub2();
}

teSTLib2.c:
#include <stdio.h>
void sub2() {
printf("Called sub2\n");
}

testit.p6:
use NativeCall;

sub sub1() is native('testlib1') {}
sub sub2() is native('testlib2') {}

sub1();

错误:
Cannot locate native library 'libtestlib1.so': ./libtestlib1.so: undefined symbol: sub2

如果我打电话 sub2调用前手动手动 sub1 ,它工作正常,但我不想这样做..

最佳答案

好的,这使它起作用,但它是一种不可移植的解决方法——它仅在您的 MoarVM 使用 dyncall 构建时才起作用。 .似乎应该有一些暴露的功能给 NativeCall可移植地执行此操作的世界。

use NativeCall;                                                                 

sub dlLoadLibrary(Str --> Pointer) is native {}
dlLoadLibrary('libtestlib2.so');

sub sub1() is native('testlib1') {}

sub1();
dlLoadLibrarydyncall加载动态库的方法,这显然足以解析符号。

来自@jnthn 的更好建议:
sub fake() is native('testlib2');
try fake();
fake()负载 testlib2 , 抛出 Exception因为 fake不是那个库中的真正例程,而是 try忽略 Exception .

关于raku - NativeCall 加载我不调用的库符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49036300/

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