Мы сами создаем 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, и команда build остается неизменной в buildall.vc.bat:
::set OPTS=threads
if not %SYMBOLS%.==. set OPTS=symbols
nmake -nologo -f makefile.vc release OPTS=%OPTS% %1
Мы пробовали всевозможные вещи без удачи.
Ок, разобрался
Я строил Tcl как 32-битный двоичный файл вместо 64-битного.
Замена
call "D:\tools\Microsoft Visual Studio 11.0\VC\bin\vcvars32.bat"
с
call "D:\tools\Microsoft Visual Studio 11.0\VC\bin\x86_amd64\vcvarsx86_amd64.bat"
и добавление AMD64 в команду nmake, как это
nmake -nologo -f makefile.vc release OPTS=%OPTS% %1 MACHINE=AMD64
в buildall.vc.bat, похоже, это исправили.
Других решений пока нет …