我在 linux 中创建共享库的 CMake 设置类似于
SET (CMAKE_CXX_FLAGS "-fPIC")
SET (LIB_UTILS_SRC
Utils.cpp
)
ADD_LIBRARY (UTILS SHARED
${LIB_UTILS_SRC}
)
源 Utils.cpp
double addTwoNumber(double x, double y)
{
return x + y;
}
当尝试使用 CTypes 访问“addTwoNumber”函数时
import os
import ctypes as c
libPath = '/home/AP/workspace/LearningCPP/lib/libUTILS.so'
libUTILS = c.cdll.LoadLibrary(libPath)
prototype = c.CFUNCTYPE(
c.c_double,
c.c_double,
c.c_double
)
addTwoNumber = prototype(('addTwoNumber', libUTILS))
res = addTwoNumber(c.c_double(2.3), c.c_double(3.5) )
我收到了一些类似的消息。
AttributeError: /home/AP/workspace/LearningCPP/lib/libUTILS.so:
undefined symbol: addTwoNumber
我使用“nm --demangle libUTILS.so”命令检查了 libUTILS.so,它清楚地显示了其中的“addTwoNumber”符号。
为什么我仍然从 python 收到“未定义符号”消息?我猜必须设置一些编译器标志,以便正确处理符号。任何建议将不胜感激!