现象
编译时遇到undefined symbol _ZTVN10__cxxabiv117__class_type_infoE。
或者其他任何跟C++标准库相关的undefined symbol。
常见的现象是自己写完setup.py然后build出现该问题。
根本原因
根本原因是stdc++未正确链接。可能是压根没链接,也可能是找不到或者版本不兼容。
针对未链接stdc++的解决方法:
- 使用g++编译
- 或者在link_args里面加入
-lstdc++
针对未找到stdc++或者stdc++版本不兼容的解决方法:
(1)首先确定libstdc++的位置:
locate libstdc++.so
(2)然后看看我们自己运行的文件用的是哪个stdc++:
ldd <your.so>
(3)最后从(1)中选择一个和(2)不同位置的libstdc++,重新运行我们的程序:
LD_LIBRARY_PATH=<NEW_LIBSTDCPP_DIR> <your_program>
如果问题未解决,重复步骤(3)直到问题解决
注意LD_LIBRARY_PATH的值要填的是libstdc++.so所在文件夹的路径,而不是它本身的路径
例如若要使用/usr/lib/x86_64-linux-gnu/libstdc++.so.6,则LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
locate命令依赖于mlocate包
编译时遇到undefined symbol _ZTVN10__cxxabiv117__class_type_infoE的问题,通常由于stdc++未正确链接。解决方法包括:使用g++编译或在link_args中加入stdc++链接参数;确定libstdc++的位置,并根据需要调整LD_LIBRARY_PATH至对应libstdc++.so的文件夹路径。如果问题仍未解决,需继续查找匹配的libstdc++版本。

2001

被折叠的 条评论
为什么被折叠?



