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;
}
次のようなCTypeを使用して'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--demanglelibUTILS.so」コマンドを使用してlibUTILS.soを確認したところ、「addTwoNumber」記号がはっきりと表示されています。
Pythonから「未定義のシンボル」メッセージが表示されるのはなぜですか?シンボルが正しくマングルされるように、いくつかのコンパイラフラグを設定する必要があると思います。任意の提案をいただければ幸いです!