现象
编译时遇到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++,重新运行我们的程序: