Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中加载共享库时未定义的符号 我尝试使用C++中的一些Python代码中的共享库。我在Linux操作系统下_Python_C++_Linker_Shared Libraries_.so - Fatal编程技术网

在Python中加载共享库时未定义的符号 我尝试使用C++中的一些Python代码中的共享库。我在Linux操作系统下

在Python中加载共享库时未定义的符号 我尝试使用C++中的一些Python代码中的共享库。我在Linux操作系统下,python,c++,linker,shared-libraries,.so,Python,C++,Linker,Shared Libraries,.so,首先,我使用以下命令创建共享库: g++ -Wall -fPIC -O2 -c HeliosDacAPI.cpp g++ -shared -o libHeliosDacAPI.so HeliosDacAPI.o 然后我尝试在python控制台中加载此库: >>> import ctypes >>> HeliosLib = ctypes.cdll.LoadLibrary("./libHeliosDacAPI.so") 我得到一个错误: Traceback (

首先,我使用以下命令创建共享库:

g++ -Wall -fPIC -O2 -c HeliosDacAPI.cpp
g++ -shared -o libHeliosDacAPI.so HeliosDacAPI.o
然后我尝试在python控制台中加载此库:

>>> import ctypes
>>> HeliosLib = ctypes.cdll.LoadLibrary("./libHeliosDacAPI.so")
我得到一个错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.5/ctypes/__init__.py", line 425, in LoadLibrary
    return self._dlltype(name)
  File "/usr/lib/python3.5/ctypes/__init__.py", line 347, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: ./libHeliosDacAPI.so: undefined symbol: _ZN9HeliosDac18GetControlResponseEiPhi

我正在寻找一些关于如何调试此类问题的提示。

我不能确定,但HeliosDac::GetControlResponseint,*,int似乎是在HeliosDac.cpp中定义的,您不会编译并链接到libHeliosDacAPI.so

事实上,从nm libHeliosDacAPI.so我们清楚地看到,使用了这个符号,但没有定义,这意味着您的问题并非来自从python加载库的方式:

                 U _ZN9HeliosDac18GetControlResponseEiPhi
您可以尝试使用以下工具进行编译:

g++ -Wall -fPIC -O2 -c HeliosDacAPI.cpp
g++ -Wall -fPIC -O2 -c HeliosDac.cpp
g++ -shared -lusb -o libHeliosDacAPI.so HeliosDacAPI.o HeliosDac.o

你能详细说明实际问题吗,或者链接到某个有更多信息的地方?我有一个相关的未定义符号问题,但我找不到一个方法来概括这个答案。之所以在这里发布此消息,是因为此页面顶部显示了谷歌搜索python加载库未定义符号的变体。@Jaccovandrop,你看,如果我没有弄错,可能是你缺少了另一个共享对象/DLL,或者共享对象/DLL编译不正确。知道了。
g++ -Wall -fPIC -O2 -c HeliosDacAPI.cpp
g++ -Wall -fPIC -O2 -c HeliosDac.cpp
g++ -shared -lusb -o libHeliosDacAPI.so HeliosDacAPI.o HeliosDac.o