总结了一下,现在是这样的情况:
我在mingw下用cmake3.0.0+gcc 4.8.1编译一个静态库,里面有几个external variable。然后把这个静态库链进一个动态库,然后把这个动态库和静态库一块链进另一个动态库,结果:
(__AutoCDtor_Init是我静态库里的一个函数)
然后我加了-Wl,--allow-multiple-definition,成功编译了,但出来的dll里的符号表里那几个external variable的名字变掉了,前面都加了__nm__
这是怎么回事?
* 上面的静态库是libRUtil2,动态库1是libRFNL,动态库2是libCVEDSP2。
* 动态库libCVESVP依赖libCVEDSP2, libRFNL, libRUtil2。但是因为__AutoCtor等符号名被改,尽管libCVESVP可以正常编译,但是链接到可执行文件再运行就会说无法找到__AutoCtor。如果所有lib都编译成静态的就能正常运行。