libstdc++ 中的符号命名约定
Symbol names convention in libstdc++
在构建库期间,我收到以下“未定义引用”错误:
libtbb.so.2: undefined reference to `__cxa_init_primary_exception@CXXABI_1.3.11'
当我检查 libstdc++ 库中的符号时,我看到了以下内容
nm -CD libstdc++.so.6.0.24 | grep "__cxa_init_primary_exception"
000000000008fdd8 T __cxa_init_primary_exception@@CXXABI_1.3.11
所以 libstdc++.so 中的符号名称与 libtbb.so 似乎要求的唯一区别是符号名称中的附加“@”。如果我输入
会更有趣
nm -C libtbb.so.2 | grep "__cxa_init_primary_exception"
U __cxa_init_primary_exception@@CXXABI_1.3.11
我看到 libtbb 需要一个实际上包含双 @ 的符号。这个命名约定背后的比例是多少?为什么链接器搜索带有一个@的符号名称?
可能与 known issue 相关?
也提到了here:
...current TBB has problems with gcc-libs, it’s compiled with gcc-libs 7.x so you will get this error if you try to build OpenCV with newest TBB
那里提出的解决方案:
This is also posted here, workaround is you should install TBB 2017_20170412-1 from Arch Linux Archive. To do this, first install newest TBB and then downgrade it.
在构建库期间,我收到以下“未定义引用”错误:
libtbb.so.2: undefined reference to `__cxa_init_primary_exception@CXXABI_1.3.11'
当我检查 libstdc++ 库中的符号时,我看到了以下内容
nm -CD libstdc++.so.6.0.24 | grep "__cxa_init_primary_exception"
000000000008fdd8 T __cxa_init_primary_exception@@CXXABI_1.3.11
所以 libstdc++.so 中的符号名称与 libtbb.so 似乎要求的唯一区别是符号名称中的附加“@”。如果我输入
会更有趣nm -C libtbb.so.2 | grep "__cxa_init_primary_exception"
U __cxa_init_primary_exception@@CXXABI_1.3.11
我看到 libtbb 需要一个实际上包含双 @ 的符号。这个命名约定背后的比例是多少?为什么链接器搜索带有一个@的符号名称?
可能与 known issue 相关?
也提到了here:
...current TBB has problems with gcc-libs, it’s compiled with gcc-libs 7.x so you will get this error if you try to build OpenCV with newest TBB
那里提出的解决方案:
This is also posted here, workaround is you should install TBB 2017_20170412-1 from Arch Linux Archive. To do this, first install newest TBB and then downgrade it.