Ошибки компоновщика против созданного пользователем tcl85.lib, работают против tcl85.lib дистрибутива ActiveState

Мы сами создаем 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

Мы пробовали всевозможные вещи без удачи.

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, похоже, это исправили.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]