TCL - 对 g++ 的 `_imp__Tcl_ResetResult' 的未定义引用

Posted

技术标签:

【中文标题】TCL - 对 g++ 的 `_imp__Tcl_ResetResult\' 的未定义引用【英文标题】:TCL - undefined reference to `_imp__Tcl_ResetResult' for g++TCL - 对 g++ 的 `_imp__Tcl_ResetResult' 的未定义引用 【发布时间】:2017-03-08 22:17:43 【问题描述】:

我对 TCL 比较陌生,我正在尝试在 Windows 10 上使用 SWIG 执行 C++ 程序。使用命令提示符。我没有使用 Visual Studio 我基本上是在尝试使用来自 TCL 的 C++ MinGW 运行 r_cpp

C:\swigwin-3.0.12\Examples\r\class>swig -c++ -tcl example.i`
C:\swigwin-3.0.12\Examples\r\class>g++ -c example.cxx
C:\swigwin-3.0.12\Examples\r\class>g++ -c example_wrap.cxx -I/Tcl/include/tcl8.6
C:\swigwin-3.0.12\Examples\r\class>g++ -shared example.o example_wrap.o -o example.dll
example_wrap.o:example_wrap.cxx:(.text+0x981): undefined reference to `_imp__Tcl_ResetResult'`example_wrap.o:example_wrap.cxx:(.text+0x995): undefined reference to `_imp__Tcl_SetObjResult'`example_wrap.o:example_wrap.cxx:(.text+0x9b9): undefined reference to `_imp__Tcl_SetErrorCode'
example_wrap.o:example_wrap.cxx:(.text+0x9cf): undefined reference to `_imp__Tcl_ResetResult'
example_wrap.o:example_wrap.cxx:(.text+0x9f3): undefined reference to `_imp__Tcl_SetErrorCode
example_wrap.o:example_wrap.cxx:(.text+0xa1e): undefined reference to `_imp__Tcl_AppendResult'
example_wrap.o:example_wrap.cxx:(.text+0xa3c): undefined reference to `_imp__Tcl_NewStringObj'
collect2.exe: error: ld returned 1 exit status

有人可以帮我吗? 我应该对文件夹中的 Makefile.in 进行更改吗????

【问题讨论】:

你可能需要链接Tcl的导入库 【参考方案1】:

自从我完成 C 语言以来已经有一段时间了,但我认为您没有在具有 g++ 抱怨的功能的静态/共享库中进行链接。在这种情况下,tcl 库类似于 libTclXX.dll。我对 Windows 上的命令行不太熟悉,但可以添加 -llibtclXX.dll -L path_to_tcllib 之类的东西。如果我没记错的话,tcl 确实为您提供了一个存根库来静态链接您的扩展,那么在运行时共享库​​可以用来解析函数......所以像 -llibtclstubs.dll 这样的东西。在您安装的 lib 目录中查找这些库的实际名称。

【讨论】:

感谢您通过将 -ltcl86.dll 添加到 -L 路径来解决问题

以上是关于TCL - 对 g++ 的 `_imp__Tcl_ResetResult' 的未定义引用的主要内容,如果未能解决你的问题,请参考以下文章

TCL_事务控制语言

使用tcl在vivado中编程设备

SWIG TCL:将类构造函数名称从 new_* 重命名为 create_*

脚本学习_Linux_Sed命令_替换

脚本学习_Linux_Sed命令_替换

脚本学习_Linux_Sed命令_替换