Meine CMake Einstellung einer gemeinsamen lib in Linux zu erstellen, ist so etwas wieCtypes keine Symbole in gemeinsam genutzten Bibliothek zu finden, erstellt mit CMake
SET (CMAKE_CXX_FLAGS "-fPIC")
SET (LIB_UTILS_SRC
Utils.cpp
)
ADD_LIBRARY (UTILS SHARED
${LIB_UTILS_SRC}
)
Quelle Utils.cpp
double addTwoNumber(double x, double y)
{
return x + y;
}
Wenn für den Zugriff ‚versucht addTwoNumber 'Funktion mit CTypes wie
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))
Ich bekomme eine Nachricht wie.
AttributeError: /home/AP/workspace/LearningCPP/lib/libUTILS.so:
undefined symbol: addTwoNumber
überprüfte ich die libUTILS.so den "nm --demangle libUTILS.so" Befehl und es zeigt deutlich das Symbol 'addTwoNumber' drin.
Warum bekomme ich immer noch die Nachricht "undefined symbol" von Python? Ich vermute, dass einige Compiler-Flags gesetzt werden müssen, damit die Symbole richtig funktionieren. Jeder Vorschlag wäre willkommen!
Danke dafür. Ich hatte das gleiche Problem - es stellte sich heraus, dass ich einfach alle C "Funktionen" externalisieren musste (wie auch in der Python-Dokumentation im Abschnitt [Python mit C oder C++ erweitern] erwähnt) (http: // docs. python.org/2/extending/extending.html#writing-extensions-in-c)). – Breakthrough