Python3调用C++;功能(名称损坏问题) 我正在实验Python 3调用共享函数的C++函数。 #!python3 # C : nm -gD /usr/lib/libshared.so # C++ : nm -gDC /usr/lib/libshared.so from ctypes import CDLL slibc = '/usr/lib/libshared.so' hlibc = CDLL(slibc) try: hlibc.foo() except: print(".foo() not found") try: hlibc._Z3foov() except: print("._Z3foov() not found")

Python3调用C++;功能(名称损坏问题) 我正在实验Python 3调用共享函数的C++函数。 #!python3 # C : nm -gD /usr/lib/libshared.so # C++ : nm -gDC /usr/lib/libshared.so from ctypes import CDLL slibc = '/usr/lib/libshared.so' hlibc = CDLL(slibc) try: hlibc.foo() except: print(".foo() not found") try: hlibc._Z3foov() except: print("._Z3foov() not found"),c++,python-3.x,shared-libraries,C++,Python 3.x,Shared Libraries,结果: .foo() not found echo from shared lib!!! 因此,如果我在Python3中调用“name mangled”函数名,它就可以工作了。但这种编程方式相当“黑客” 有没有办法告诉Python 3它调用C++而不是C,因此必须处理我的错误?< /P>

结果:

.foo() not found
echo from shared lib!!!
因此,如果我在Python3中调用“name mangled”函数名,它就可以工作了。但这种编程方式相当“黑客”

有没有办法告诉Python 3它调用C++而不是C,因此必须处理我的错误?< /P> <其他线程不回答这个问题,或者说我需要禁用C++代码中的名字修改。但我非常希望保持启用状态

#ifdef __cplusplus
extern "C" {
#endif

extern void foo();

#ifdef __cplusplus
}
#endif
没有更好的解决方案吗?

问题是没有标准的损坏名称。