Ich versuche SWIG zu verwenden, um Wrapper für einige meiner C++ - Funktionsaufrufe zu generieren.SWIG TCL Statische Verknüpfung
Ich versuche auch, meine eigene TCL-Shell zu erstellen, also muss ich die generierten SWIG-Bibliotheken statisch verknüpfen. Ich habe meine eigene Hauptfunktion mit einem Tcl_AppInit
Anruf, wo ich einige vorherige Einrichtung mache.
Um dies zu tun, welche Funktion sollte ich in meinem Programm Tcl_AppInit
Aufruf enthalten? Ich habe festgestellt, dass SWIG_init
nicht die richtige Funktion ist. Ich habe sogar versucht Cell_Init
wo Zelle ist der Name der Klasse in meinem Code, aber das hilft auch nicht.
Wie kann ich SWIG-Objektdateien mit meiner eigenen Hauptfunktion statisch verknüpfen und Tcl_Appinit
aufrufen?
Zur Zeit, als ich den folgenden Befehl verwenden, um meinen executabel zu verknüpfen bekomme ich folgende Fehlermeldung:
g++ -o bin/icde src/core/*.o src/read/*.o src/swig/*.o src/icde/*.o -ltk -ltcl
ich die folgende Fehlermeldung erhalten:
src/icde/main.o: In function `AppInit(Tcl_Interp*)':
main.cpp:(.text+0xa9): undefined reference to `Cell_Init(Tcl_Interp*)'
collect2: ld returned 1 exit status
überprüfte ich die src/swig/Zelle. o Datei, die die Cell_Init Funktion hat oder nicht mit objdump:
~> objdump -d src/swig/cell.o | grep Cell_Init
00006461 <Cell_Init>:
646c: 75 0a jne 6478 <Cell_Init+0x17>
bin ich nicht sicher, ob ich mache etwas falsch beim verlinken.
------------------- UPDATE -------------------------- -
Ich fand, dass einschließlich der swig/swig.cxx Datei direkt in der Hauptdatei, die die Tcl_AppInit Funktion aufruft, das Verknüpfungsproblem löst. Gibt es einen Grund dafür?
Ist es nicht möglich, die SWIG-Datei und die Datei mit der Hauptfunktion zu erstellen und separat zu verknüpfen?
Als Reaktion auf Ihr Update ist es möglich, aber Sie haben eine der einfachsten Methoden. :-) –