gpt4 book ai didi

c - 如何从我的库中调用可执行文件中的函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:34:24 25 4
gpt4 key购买 nike

我有一个可执行文件和一个动态库 (.so)。该库导出一些符号,可执行文件成功调用它。但我想让库调用可执行文件的函数成为可能。我尝试在可执行文件中执行以下操作:

//test
extern "C" void print(const char * str) {
std::cout << str << std::endl;
}

图书馆里的这个:

extern "C" void print(const char *);

但是当我在可执行文件中调用 dlopen(以加载库)时,它返回错误 undefined symbol: print。我该如何解决?

最佳答案

在 Linux/ELF 中你可以传递 -export-dynamic链接器的选项(编译器驱动程序上的 -rdynamic gcc ),以便将可执行文件中的符号导出到共享对象。

你会有一个假人 print库中的实现,这将被可执行文件的实现所掩盖,因为通常在共享对象之前搜索可执行文件以进行符号解析。

它的缺点是它不是很细粒度,你最终可能会覆盖一些你不打算覆盖的符号。更细粒度的选项是创建要导出为的符号列表:

{
print;
<other symbols>
};

并将该列表传递给链接器,例如来自海湾合作委员会:-Wl,--dynamic-list=<file with list of symbols>

关于c - 如何从我的库中调用可执行文件中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22037629/

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