簡體   English   中英

使用ctypes包裝C ++:未定義符號

[英]Wrapping C++ using ctypes: undefined symbol

我正在嘗試包裝C ++,以便在Python中使用C ++函數。 目前,我正在嘗試ctypes,但是不幸的是,我還沒有成功。 首先,我用C ++編寫了一個Hello World程序,我正嘗試使用ctypes從Python調用它。 這是我所做的:

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 ++庫,而不是自己編寫這樣的庫。 很好。 有人可以幫忙嗎?

您應該使用g++而不是gcc gcc不會將二進制文件與c ++庫鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM