python — перенос C ++ с использованием ctypes: неопределенный символ

Я экспериментирую с переносом C ++, чтобы использовать функции C ++ в Python. В настоящее время я пробую ctypes и, к сожалению, пока не добился успеха. Для начала я написал программу Hello World на C ++ и пытаюсь вызвать ее из Python, используя ctypes. Вот что я сделал:

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 ++ вместо того, чтобы написать такую ​​самостоятельно. Это сработало нормально. Может кто-нибудь помочь?

1

Решение

Вы должны скомпилировать с g++ вместо gcc,
gcc не связывает двоичный файл с библиотеками c ++.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]