Я пытаюсь использовать SWIG для генерации оболочек для некоторых из моих вызовов функций C ++.
Также я пытаюсь создать свою собственную оболочку TCL, поэтому мне нужно статически связать сгенерированные библиотеки SWIG.У меня есть собственная функция main с вызовом Tcl_AppInit
, где я выполняю некоторые предварительные настройки.
Для этого какую функцию я должен включить в вызов Tcl_AppInit
моей программы?Я обнаружил, что SWIG_init
не правильная функция.Я даже попытался Cell_Init
, где cell - это имя класса в моем коде, но это тоже не помогает.
Как статически связать объектные файлы SWIG с моей собственной главной функцией и вызовом Tcl_Appinit
?
В настоящее время, когда я использую следующую команду для связывания моего исполняемого файла, я получаю следующую ошибку:
g++ -o bin/icde src/core/*.o src/read/*.o src/swig/*.o src/icde/*.o -ltk -ltcl
Я получаю следующую ошибку:
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
Я проверил файл src / swig / cell.o, который имеет функцию Cell_Init или не использует objdump:
~> objdump -d src/swig/cell.o | grep Cell_Init
00006461 <Cell_Init>:
646c: 75 0a jne 6478 <Cell_Init+0x17>
Я не уверен, что делаю что-то не так во время соединения.
------------------- ОБНОВЛЕНИЕ ----------------------------
Я обнаружил, что включение файла swig / swig.cxx непосредственно в основной файл, который вызывает функцию Tcl_AppInit, решает проблему с линковкой,Для этого есть причина.
Разве нельзя создать и отдельно связать файл swig и файл с основной функцией?