【发布时间】:2014-01-20 04:30:33
【问题描述】:
我们正在自己构建 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
我们一直在尝试各种事情,但都没有运气。
【问题讨论】:
-
看起来与链接库有关的不同选项,这不是我非常了解的(我在不同平台上工作)。
-
只是一个想法:您是针对 ActiveTcl 库还是根据源代码制作的库进行编译? IIRC,你应该链接到你编译的那些…
标签: c++ visual-c++ linker tcl nmake