gpt4 book ai didi

c++ - 使用 ctypes : undefined symbol 包装 C++

转载 作者:行者123 更新时间:2023-11-30 01:22:22 24 4
gpt4 key购买 nike

我正在尝试包装 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_

回溯提到了一些关于 undefined symbol 的事情,但是我不知道为什么会出现这个错误以及如何解决它。我还尝试了标准 C++ 库,而不是自己编写这样的库。结果很好。有人可以帮忙吗?

最佳答案

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

关于c++ - 使用 ctypes : undefined symbol 包装 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16440412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com