Мы создаем Tcl сами, чтобы распространять наши собственные скомпилированные двоичные файлы с приложением. Само приложение связывается с библиотекой Tcl и использует внутренний API.
Для сборки Tcl мы взяли исходники с http://sourceforge.net/projects/tcl/, мы затем перейдите в каталог /win, измените файл buildall.vc.bat, чтобы он указывал на нашу установку MSVC, а затем запустите этот файл bat. Сборка работает, как и ожидалось, и выходные данные создаются в /win/Release_VC11. В частности, создаются tcl85.lib и tcl85.dll.
Когда мы связываемся с этим .lib из нашего приложения Qt C++, мы получаем кучу ошибок компоновщика. Например:
commands.obj : error LNK2019: unresolved external symbol __imp_Tcl_AppendResult
referenced in function "int __cdecl CallQMessageBox(void *,struct Tcl_Interp *,
int,char * * const)" (?CallQMessageBox@@YAHPEAXPEAUTcl_Interp@@HQEAPEAD@Z)
Однако, когда мы связываемся с файлом tcl85.lib, предоставленным как часть дистрибутива ActiveState Tcl, компоновщик не имеет никаких проблем и строится нормально. Мы убедились, что в обоих случаях это одна и та же версия Tcl.
Мы используем MSVC 2012 (Express Edition) для сборки Tcl, и команда сборки остается неизменной в buildall.vc.bat:
::set OPTS=threads
if not %SYMBOLS%.==. set OPTS=symbols
nmake -nologo -f makefile.vc release OPTS=%OPTS% %1
Мы пробовали все виды вещей без везения.