2013-05-08 58 views
1

我正在试验包装C++以便在Python中使用C++函数。目前我正在尝试ctypes,但不幸的是,我还没有成功。对于初学者,我用C++编写了一个Hello World程序,我正试图用ctypes从Python中调用它。这是我做了什么:使用ctypes包装C++:未定义的符号

path_to_dir $ vim helloworld.cpp 

1: #include <iostream> 
2: 
3: using namespace std; 
4: 
5: int main() 
6: { 
7:  cout << "Hello, world!" << endl; 
8:  return 0; 
9: } 

path_to_dir $ gcc -shared -Wl,-soname,hello_module -o hello_module.so -fPIC helloworld.cpp 
path_to_dir $ vim helloworld.py 

1: import ctypes 
2: 
3: libc = ctypes.cdll.LoadLibrary("path_to_dir/hello_module.so") 
4: 
5: libc.main() 

path_to_dir $ python helloworld.py 

Traceback (most recent call last): 
    File "helloworld.py", line 3, in <module> 
    libc = ctypes.cdll.LoadLibrary("/home/carlos/Workspace/Freestyle/Wrapping_C++/ctypes/hello_module.so") 
    File "/usr/lib/python2.7/ctypes/__init__.py", line 443, in LoadLibrary 
return self._dlltype(name) 
    File "/usr/lib/python2.7/ctypes/__init__.py", line 365, in __init__ 
self._handle = _dlopen(self._name, mode) 
OSError: /home/carlos/Workspace/Freestyle/Wrapping_C++/ctypes/hello_module.so: undefined symbol: _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_ 

回溯提到一些有关未定义的符号,但是我不知道为什么我收到此错误,以及如何解决它。我也尝试过使用标准的C++库,而不是像我自己写的那样。这很好。有人可以帮忙吗?

回答

5

您应该使用g++而不是gcc进行编译。 gcc不会将二进制文件与C++库链接。

+0

谢谢Tezcat,这解决了我的问题! – Aeronaelius 2013-05-08 14:58:26