微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

缺少不存在的库:TCL86.LIB

如何解决缺少不存在的库:TCL86.LIB

我尝试使用 VS2017 在 Win10 64 位上编译 OpenCascade。我在 64 位上编译,但遇到链接错误,其中之一是:

1>------ Build started: Project: TKDraw,Configuration: Debug x64 ------
1>LINK : Fatal error LNK1104: cannot open file 'tcl86.lib'
========== Build: 0 succeeded,9 Failed,50 up-to-date,1 skipped ==========

我注意到在 TKDraw 项目中,我有以下链接设置文件/路径:

..\..\win64\vc14\libd\TKMesh.lib
..\..\win64\vc14\libd\TKService.lib
..\..\win64\vc14\libd\TKHLR.lib
C:\ActiveTcl\lib\tcl86t.lib
C:\ActiveTcl\lib\tk86t.lib
gdi32.lib
advapi32.lib
user32.lib
shell32.lib
..\..\win64\vc14\libd\TKShHealing.lib
opengl32.lib
windowscodecs.lib
C:\Program Files\freetype\lib\freetyped.lib
winmm.lib
..\..\win64\vc14\libd\TKTopAlgo.lib
..\..\win64\vc14\libd\TKGeomAlgo.lib
..\..\win64\vc14\libd\TKBRep.lib
..\..\win64\vc14\libd\TKGeomBase.lib
..\..\win64\vc14\libd\TKG3d.lib
..\..\win64\vc14\libd\TKG2d.lib
..\..\win64\vc14\libd\TKMath.lib
..\..\win64\vc14\libd\TKernel.lib

如您所见,他们都没有告诉我关于 tcl86.lib 的信息,但是编译器说缺少这个库。为什么 ?而且,我在 opencascade 文件夹中没有找到任何 tcl86.lib,所以,为什么要问我这个文件?你能帮我一点吗?

解决方法

您可以在此处下载 Open CASCADE 的 3rd 方库:https://old.opencascade.com/content/3rd-party-components

如果您将所有 3rd 方库放在一个目录中,您可以在 CMake 构建中说明其位置,构建将自动使用它们。

,

这是因为 Visual Studio C++ 编译器具有 #pragma lib 功能,允许直接在 C++ 代码中添加库依赖项,请参阅 src/Draw/Draw.cxx

// on MSVC,use #pragma to define name of the Tcl library to link with,// depending on Tcl version number
#ifdef _MSC_VER
// two helper macros are needed to convert version number macro to string literal
#define STRINGIZE1(a) #a
#define STRINGIZE2(a) STRINGIZE1(a)
#pragma comment (lib,"tcl" STRINGIZE2(TCL_MAJOR_VERSION) STRINGIZE2(TCL_MINOR_VERSION) ".lib")
#pragma comment (lib,"tk"  STRINGIZE2(TCL_MAJOR_VERSION) STRINGIZE2(TCL_MINOR_VERSION) ".lib")
#undef STRINGIZE2
#undef STRINGIZE1
#endif

显然,您的 Tcl/Tk 构建在库文件名 tcl86t.lib 中有一个额外的后缀“t”,因此链接器无法找到 tcl86.lib

可能的解决方案:

  • 在您的 Tcl 安装中重命名 tcl86t.lib -> tcl86.lib(与 tk 相同)。
  • 注释/删除 OCCT 源代码中的 pragma comment。当您使用 CMake 时,似乎所有库都已通过项目设置指定。
  • 从源代码构建 Tcl/Tk 或使用没有名称偏差的预构建二进制文件(例如由 OCCT project 提供)。
,

我在尝试使用 MSVC 从源代码编译 SQLite 时遇到了同样的错误。我在源代码中没有看到 #pragmatcl86.lib 的引用。但是,我复制了 Tcl 目录中的 tcl86.lib,并将其重命名为 tcl86t.lib。它似乎有效。

在 SQLite crash8-1.2 test 中,出现错误:

testfixture.exe:执行时关闭引号后的额外字符 "sqlite3_crashparams"

我希望这只是一个测试问题。

此外,如果解压 SQLite 源代码的任何目录名称中有空格,构建过程也会出错。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。