【问题标题】:Finding the source of LNK1104's filename查找 LNK1104 文件名的来源
【发布时间】:2022-01-21 05:55:45
【问题描述】:

我正在使用 CMake 生成的 Visual Studio 项目中工作,由于某种原因,我在构建时收到 LNK1104 错误,提示“无法打开文件 'hboost_python27-vc142-mt-x64-1_72.lib'”和我知道一个事实,该文件在任何地方都不存在,并且正确的依赖项是“hboost_python27-mt-x64.lib”。那么为什么 Visual Studio 要求这个文件呢?我将如何推导出这个文件名的来源,然后修复它?这更像是一个 CMake 问题吗?还是 Visual Studio 问题?

作为参考,我正在为 Houdini 编译一个自定义的美元资产解析器,这是我正在处理的代码 https://github.com/mwalk176/USD-Custom-Resolver-Windows-Example/tree/main/custom_resolver/project

【问题讨论】:

  • 可能是标题中的#pragma comment (lib ...
  • 请注意,美元本身依赖于 boost。不要混合不同的 boost 库。请改用vcpkg
  • 我正在尝试根据 Houdini 的 USD 和 boost 的内部实现来编译它,但这仍然需要 vcpkg 吗?
  • 唯一的#pragma 注释是我的代码主标题中的#pragma once,这会导致它吗?
  • @drescherjm 更新:在似乎导致它的包含的头文件之一中找到了#pragma comment (lib...)。格式为pragma comment(lib, HBOOST_LIB_PREFIX HBOOST_STRINGIZE(HBOOST_LIB_NAME) "-" HBOOST_LIB_TOOLSET HBOOST_LIB_THREAD_OPT HBOOST_LIB_RT_OPT HBOOST_LIB_ARCH_AND_MODEL_OPT "-" HBOOST_LIB_VERSION ".lib"),在VS2019环境下如何设置这些变量?

标签: c++ visual-studio cmake houdini usd


【解决方案1】:

我认为您的 PC 上安装了相当旧版本的 Boost,从相当新版本的 Boost 开始,这是编写更详细语法(如 hboost_python27-vc142-mt-x64-1_72.lib)的标准方法,所以它是正确的。

尝试下载 Boost 1.72 from here,或者如果您的代码与更新的 Boost 版本兼容,那么最好立即下载最新版本 1.78 download

否则在您的文件系统中将文件hboost_python27-mt-x64.lib 复制到hboost_python27-vc142-mt-x64-1_72.lib,或制作Windows 硬链接。这样编译的时候就可以找到了。

另一种选择是修改当前代码

#pragma comment(lib, HBOOST_LIB_PREFIX HBOOST_STRINGIZE(HBOOST_LIB_NAME) "-" \
    HBOOST_LIB_TOOLSET HBOOST_LIB_THREAD_OPT HBOOST_LIB_RT_OPT \
    HBOOST_LIB_ARCH_AND_MODEL_OPT "-" HBOOST_LIB_VERSION ".lib")

到更短的版本:

#pragma comment(lib, HBOOST_LIB_PREFIX HBOOST_STRINGIZE(HBOOST_LIB_NAME) "-" \
    HBOOST_LIB_THREAD_OPT HBOOST_LIB_RT_OPT HBOOST_LIB_ARCH_AND_MODEL_OPT ".lib")

在此更改后,此编译指示代码将生成预期的文件名hboost_python27-mt-x64.lib

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多