【发布时间】:2013-06-22 05:22:20
【问题描述】:
http://community.activestate.com/node/7011
这有点像链接中那个可怜的 chap shang(我可以不分性别地使用 chap 吗?),只是又过了一年,我有 MSVS 2012。
详情
CMake 已将 C:...\Tcl\lib\tcl85.lib 放在我的二进制文件的依赖项列表中(我签入了生成的 .vcproj 文件 - 它在那里)。然而,链接器错误很多,形式如下:
nativeTCL_wrap.obj : error LNK2019: unresolved external symbol __imp__Tcl_[some-command-name] 在函数 _SWIG_Tcl_[some-other-command-name] 中引用。
所以我检查了 MSVS 中项目的依赖项列表中列出的头文件:版本为 #define 为 8.5。这与我试图链接到的库相匹配。我尝试使用dependency walker 探索tcl85.lib。显然它无法探索那种文件。我在上面运行了 dumpbin.exe... .lib 文件具有所有缺失的功能,但格式如下:
__imp_Tcl_[一些命令名称]
它包含所有符号...但是每个符号都缺少一个下划线!
然后我研究了在 Cygwin 中使用的 ActiveState 的 Tcl 发行版给出的 libtcl85.dll.a 文件,符号如下所示:
__imp__Tcl_[一些命令名]
所以它有额外的下划线,和在 Cygwin 上正确的二进制链接。
...
这真的是我举起双手思考“做什么?”的时刻之一。在其所有简单化的语法上搞砸了荣耀。相同的 swig 接口文件与相同的 CMake 在 Cygwin 中成功生成模块。但是开发 Cygwin 是一件很痛苦的事情,因为它太慢了(构建时间几乎是原生 Windows 系统的 5-8 倍)。
接下来会发生什么?
我是否试图说服 Swig 生成具有少一个下划线的依赖项?如果有怎么办?我会放弃并提交错误报告吗?如果有,在哪里?这是 ActiveState Tcl 中的错误吗?这是 Swig 中的错误吗?这根本不是一个错误,我只是被搞砸了?
因为没有下划线,王国就消失了?
【问题讨论】:
标签: visual-studio-2012 tcl swig activestate