c++ - 针对自定义构建的 tcl85.lib 的链接器错误,适用于 ActiveState 分发的 tcl85.lib

标签 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

我们一直在尝试各种各样的事情,但运气不佳。

最佳答案

好的,明白了:

我将 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 中似乎已经修复了它。

关于c++ - 针对自定义构建的 tcl85.lib 的链接器错误,适用于 ActiveState 分发的 tcl85.lib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21226265/

相关文章:

c++ - 将 if/assign 转换为线程安全的 CAS 操作

c++ - vector<T> 调用的构造函数的奇怪问题

c++ - Openmp 结果不可靠?

iphone - 构建失败 : symbol(s) not found

c++ - 让 cURL 与 Visual Studios 2017 一起工作

c++ - 目标文件和共享目标文件之间的关系

c++ - MPI 和全局对象 : All ranks have the object at same memory address?

c++ - 寻找一种更好的方法来初始化 Eigen3 矩阵

c++ - 打开错误文件的错误信息

c++ - 默认 TreeView 项目高度