http://community.activestate.com/node/7011
有点像那个可怜的小商贩(我能用男人的性别-中立吗?)在那里的链接,但这是另一年,我有MSVS 2012。
详细信息
CMake将C:.\Tcl\lib\tcl85.lib放在我的二进制文件的依赖项列表中(我签入了生成的.vcproj文件--它就在那里)。然而,链接器的错误很多,而且形式如下:
nativeTCL_wrap.obj : LNK2019:未解析的外部符号__imp__Tcl_some命令-函数_SWIG_Tcl_中引用的名称-其他命令名。
因此,我在MSVS: version is #define as 8.5中检查了我的项目的依赖项列表中列出的头文件。这与我试图链接到的库相匹配。我尝试使用依赖步行器来探索tcl85.lib。显然它无法探索那种文件。我查了dumpbin.exe ..lib文件具有所有缺失的函数,但有以下形式:
__imp_Tcl_some命令名
它有所有的符号。但是他们每个人都缺少一个下划线!
然后,我研究了由ActiveState的Tcl发行版给出的libtcl85.dll.file文件,这些符号如下所示:
__imp__Tcl_some命令名
因此,它的有额外的下划线,和二进制链接正确的Cygwin。
..。
这是一个严肃的时刻,我把手举到空中,想:“怎么办?”在所有简单化的语法上搞砸了荣耀。具有相同CMake的同一个swig接口文件在Cygwin中成功地生成一个模块。但是开发Cygwin是一个麻烦,因为它有多慢(构建的时间几乎是本地Windows系统的5-8倍)。
接下来会发生什么?
我是否试图说服Swig用少一个下划线来生成依赖项?如果是的话,怎么做?我会放弃并提交错误报告吗?如果是,在哪里?这是ActiveState Tcl中的一个bug吗?这是斯威格的窃听器吗?难道这根本不是个窃听器我就完蛋了?
因为没有下划线,王国就失去了?
发布于 2013-06-22 05:30:24
所以,当我写我的问题的时候,我开始考虑所有不同的替代方案,而不是这些可能会出错的问题。然后,我记得CMake默认选择32位版本的MSVS。我现在觉得很不好意思,但由于其他人在ActiveState论坛上显然也有类似的问题,我要把我的答案留给需要这个小小的,小小的,有点小的提醒的其他人。
事实证明,选择了64位版本的带cmake -G "Visual Studio 2012 Win64"的MSVS修复了一切。连接很好。二进制文件成功地加载到Tclsh中。
不过,我希望从构建工具中得到更全面的错误信息,试图将32位和64位二进制文件连接在一起.
https://stackoverflow.com/questions/17247582
复制相似问题