Meine CMake-Einstellung zum Erstellen einer gemeinsamen Lib in Linux ist etwas wie
%Vor%Quelle Utils.cpp
%Vor%Beim Zugriff auf die Funktion 'addTwoNumber' mit Hilfe von CTypes wie
%Vor%Ich bekomme eine Nachricht wie.
%Vor%Ich habe die libUTILS.so mit dem Befehl "nm --demangle libUTILS.so" überprüft und es zeigt deutlich das Symbol "addTwoNumber".
Warum bekomme ich immer noch die Nachricht "undefiniertes Symbol" von Python? Ich vermute, dass einige Compiler-Flags gesetzt werden müssen, damit die Symbole richtig funktionieren. Jeder Vorschlag wäre willkommen!
Interessant, ich benutze normalerweise numpy.ctypes
, da ich ständig mit großen Datenmengen umgehen muss und nie irgendwelche Probleme hatte, aber ich denke, ich weiß, was hier vor sich geht, es ist, dass die Namen vom g ++ Compiler gemangelt werden hat es so gemacht:
Makefile:
%Vor%Utils.cpp
%Vor%test.py
%Vor%Ausgabe:
%Vor% Beachten Sie das extern
Schlüsselwort, das stellt sicher, dass der Compiler den Namen nicht verändert, Sie müssen einige zusätzliche Sachen machen, wenn Sie unter Windows sind. Ich fand Ссылка was irgendwie interessant war.
Ich hoffe, das hilft.
meine Maschine:
$ g ++ - Version
i686-apple-darwin10-g ++ - 4.2.1 (GCC) 4.2.1 (Apple Inc. Build 5666) (Punkt 3) Copyright (C) 2007 Freie Software-Grundlage, Inc. Dies ist freie Software; Siehe die Quelle für Kopierbedingungen. Es gibt kein Garantie; nicht einmal für MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK.$ uname -a
Darwin MacBookPro 10.8.0 Darwin Kernel Version 10.8.0: Di 7. Juni 16:33:36 PDT 2011; Wurzel: xnu-1504.15.3 ~ 1 / RELEASE_I386 i386