gpt4 book ai didi

c++ - 使用 C++ 的动态链接问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:21:50 25 4
gpt4 key购买 nike

运行整个过程会出现以下错误:

Cannot open library "./libexamplefilter.so" ./libexamplefilter.so: undefined symbol: _ZTI10BaseFilter

由于代码非常小且易于理解,您应该能够立即理解它。有人知道哪里出了问题吗?

我是否应该将 create() 声明为 extern "C"void* create(void);然后转换 void 指针而不是直接尝试链接 C++ 符号?

下一步

使用 -Wl,-export-dynamic 后,它告诉我:

Cannot load library symbols "./libexamplefilter.so" ./libexamplefilter.so: undefined symbol: create

呃,我是否必须在那里给出一个损坏的 c++ 名称,而不是“dlsym(handle, “create”)”。大概。有没有优雅的方式来做到这一点?

答案是声明 create() extern "C"... create ....这非常有效。问题解决了。感谢您的帮助和耐心等待。

最佳答案

编译主可执行文件时需要使用链接器选项“export-dynamic”。

通常,主可执行文件不会导出它的符号供动态链接器使用(除非该符号被一些参与链接的共享库使用),这意味着如果你的库回调主 exe,它将无法加载。

当您尝试使用虚方法子类化类时以及在其他一些情况下,这会隐式发生。如果您尝试这样做,那就失败了。

所以当链接你的主程序时,添加-Wl,-export-dynamic,它就会正常工作。

关于c++ - 使用 C++ 的动态链接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1500689/

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