http://community.activestate.com/node/7011
这有点像链接中那个可怜的 chap shang (我可以使用不分性别的 chap 吗?),除了又是一年,我有 MSVS 2012。
细节
CMake 已将 C:...\Tcl\lib\tcl85.lib 放在我的二进制文件的依赖项列表中(我签入了生成的 .vcproj 文件 - 它在那里)。然而,链接器错误很多,形式如下:
nativeTCL_wrap.obj:错误 LNK2019:未解析的外部符号 __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 中的错误吗?这根本不是一个错误,我只是搞砸了?
因为没有下划线,王国就消失了?