问候。如何解决未解决的符号?
我有我的lib动态链接到我的程序有问题。 以下是发生了什么:我正在开发一个模块化程序并测试模块系统。事情是我的模块使用了一些在主要二进制文件中定义的类:一些抽象类,它们不会引起任何问题,还有一个非常具体的类,它们无法解决。
我使用的dlopen/dlsym进行/ dlclose的功能集。 而我使用g ++进行编译。
的事情是:如果我问的dlopen加载所有的符号,那么它没有告诉我"undefined symbol: _ZNK3zia3api8DataTreecvRKSsEv
但是,如果我在懒惰模式推出dlopen的,它只会在所谓类的第一次使用发生(和在那之后崩溃)。
因此,这是“的Datatree”类的,我希望把它同时适用于主二进制和模块。 我已经试着在每个二进制文件中进行编译:正如我所料,它不起作用。 我也尝试完全内联,但它和我的其他尝试一样没用。 我试图用选项“-rdynamic”编译主二进制文件。没有变化。
我一直在寻找,询问朋友从昨天开始,但似乎没有人知道如何解决这类问题。
我编译模块的对象的选项-fPIC,像这样:
g++ -Wall -fPIC -c mysource.cpp
然后我用这条线使图书馆:
g++ -shared -Wl,-soname,mylib.so.1 -o mylib.so mysource.o
我想最好的解决办法将不会编译库中的对象,而是从主二进制文件中提供该符号。 所以问题是:怎么做? (这是我必须做的吗?)
demangled name是zia :: api :: DataTree :: operator std :: string const&()const – 2011-04-13 12:34:59
您可以使用'C++ filt'实用程序(在linux上)获取demangled名称。调用只是'C++ filt _ZNK3zia3api8DataTreecvRKSsEv',结果是@Industrial发布的内容。非常便利! – 2011-04-13 12:37:56
好主!这确实是不确定的!我没有注意到它!非常感谢 ! – Michael 2011-04-13 12:44:00