在VS 2010下编译的链接阶段缺少符号

时间:2012-11-27 02:30:36

标签: visual-studio-2010 tcl

我正在尝试构建和修复UCL RAT,以便在使用VS 2010编译的Windows上运行。 我已经在Visual Studio 2010和主RAT可执行文件下成功编译了TCL 8.5.12。

RAT使用TCL来驱动它的用户界面。

当我开始修改RAT以将通常存储为字符串的TCL代码嵌入到zip文件中而不是使用zvfs时,出现了问题。目的是最终在可执行文件的末尾嵌入zip,以最大限度地减少磁盘使用和分发文件的数量。

所以我从TOBE项目下载了一些zvfs的代码,看看我是否可以使用它来使进程更快(特别是zvfs.c文件基本上是tcl的zvfs扩展名)

这需要Zlib来运行哪个构建和集成的罚款。

但问题是zvfs代码与TCL没有正确链接。它通过编译,但在链接时出现以下错误:

2>zvfs.obj : error LNK2019: unresolved external symbol _TclOpenFileChannelInsertProc referenced in function _Zvfs_Init
2>zvfs.obj : error LNK2019: unresolved external symbol _TclStatInsertProc referenced in function _Zvfs_Init
2>zvfs.obj : error LNK2019: unresolved external symbol _TclAccessInsertProc referenced in function _Zvfs_Init

没有像c / c ++和链接器一样经验,这对于更现代版本的Windows修复RAT已经成为一个障碍。

RAT的版本是UCL subversion服务器的最新版本,如果这有任何影响,Zlib版本为1.2.7。

干杯

1 个答案:

答案 0 :(得分:1)

这些特定功能已经过时,但仍然支持正确构建到Tcl 8.5(包括8.5.12)。您需要使用编译,在Tcl库的干净构建期间定义预处理器符号USE_OBSOLETE_FS_HOOKS(为任何东西)。唉,这意味着您需要编辑远离默认值的构建指令,这是我无法帮助的地方,因为我使用的是与您完全不同的构建链(在不同的平台上)。

此外,在链接时,您需要链接Tcl库本身而不是其存根库。