我们有一个相当大的框架,它包含多个CMakeLists.txt
文件,并包含多个共享库。最后我们使用SWIG生成一个Cython接口。
一切都适用于MacOS,即我们可以使用cmake
和make install
进行编译,并使用python中的import x
框架。使用GCC-6在Ubuntu上一切都运行良好。
但是,当使用GCC 7.2.0(使用Ubuntu 17.10)和CMAKE_BUILD_TYPE=Release
时,我们会收到以下错误:
ImportError: /home/madsohm/.local/lib/libbhc.so: undefined symbol: _ZNSaIlEC1Ev
尝试import
时。使用CMAKE_BUILD_TYPE=Debug
工作正常,因此必须是由-O3
添加的Release
才是罪魁祸首。
我试图在so
- 文件中搜索符号,然后
$ scanelf -l -s _ZNSaIlEC1Ev | grep _ZNSaIlEC1Ev
ET_DYN _ZNSaIlEC1Ev /usr/lib/libbhxx.so
ET_DYN _ZNSaIlEC1Ev /usr/lib/libbhc.so
ET_DYN _ZNSaIlEC1Ev /usr/lib/libbh.so
有Debug
但只有
$ scanelf -l -s _ZNSaIlEC1Ev | grep _ZNSaIlEC1Ev
ET_DYN _ZNSaIlEC1Ev /usr/lib/libbhc.so
Release
。
_ZNSaIlEC1Ev
demangled是std::allocator<long>::allocator()
。
无论如何,我可以弄清楚这个符号是指什么,或者错误在哪里以及我能做些什么呢?