针对自定义构建的tcl85.lib的链接器错误,适用于ActiveState发行版的tcl85.lib

时间:2014-01-20 04:30:34

标签: c++ visual-c++ linker tcl nmake

我们正在构建Tcl,以便使用应用程序分发我们自己编译的二进制文件。应用程序本身链接到Tcl库并在内部使用API​​。

要构建Tcl,我们从http://sourceforge.net/projects/tcl/获取源代码,然后导航到/ win目录,将buildall.vc.bat文件更改为指向我们的MSVC安装,然后运行该bat文件。建筑按预期工作,输出在/ win / Release_VC11中生成。更具体地说,生成了tcl85.lib和tcl85.dll。

当我们从Qt C ++应用程序中链接此.lib时,我们会收到一堆链接器错误。例如:

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)

但是,当我们链接到作为ActiveState Tcl发行版的一部分提供的tcl85.lib文件时,链接器没有任何问题并且构建正常。我们在两种情况下都验证了它的完全相同的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

我们一直在努力尝试各种各样的事情。

1 个答案:

答案 0 :(得分: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中的

似乎修复了它。