gpt4 book ai didi

c++ - 如何解析未解析的符号?

转载 作者:太空宇宙 更新时间:2023-11-04 14:23:46 25 4
gpt4 key购买 nike

问候。

我在将我的库动态链接到我的程序时遇到问题。这是正在发生的事情:我正在开发一个模块化程序并测试模块系统。问题是我的模块使用了一些在主二进制文件中定义的类:一些不会引起任何问题的抽象类,以及一个无法解析的非常具体的类。

我正在使用 dlopen/dlsym/dlclose 函数集。我使用 g++ 进行编译。

问题是:如果我要求 dlopen 加载所有符号,那么它不会告诉我 "undefined symbol: _ZNK3zia3api8DataTreecvRKSsEv但是,如果我以惰性模式启动 dlopen,它只会在第一次使用所谓的类时发生(并在之后立即崩溃)。

所以这是“DataTree”类,我想让它可用于主二进制文件和模块。我已经尝试在每个二进制文件中编译它:如我所料,它没有用。我也试图让它完全内联,但它和我的其他尝试一样无用。我尝试使用“-rdynamic”选项编译主二进制文件。没有变化。

从昨天开始就一直在找,问 friend ,但是好像没人知道怎么解决这种问题。

我使用选项 -fPIC 编译模块的对象,如下所示:

g++ -Wall -fPIC -c mysource.cpp

然后我使用这一行来创建库:

g++ -shared -Wl,-soname,mylib.so.1 -o mylib.so mysource.o

我认为最好的解决方案是不在库中编译对象,而是让符号在主二进制文件中可用。那么问题是:怎么做? (这是我必须做的吗?)

最佳答案

尝试将 -rdynamic 添加到库模块而不是主程序,并确保所有具有虚方法并被继承的类都具有虚析构函数。另一个建议:做一个最小的例子并张贴在这里。

关于c++ - 如何解析未解析的符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5649015/

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