WRF-OOP 2024-06-11 10:55 采纳率: 41.7%
浏览 232
已结题

Qt环境下LNK1104报错问题

前提条件:
我使用的是我的客户提供的内部开发环境,这个开发环境是基于Qt Creator基础上开发的,我们在此次的问题中暂且叫它“CNC”。
在此次的项目中我将一个名为DDS的库编译成了DDS.lib的库文件,成功将DDS.lib添加到我的项目中后构建项目发生了以下报错信息:“:-1: error: LNK1104: could not open file“ddservicesd.lib””。经过我的排查,我发现这个"ddservicesd.lib"文件在DDS库中是存在名为ddservices.h和ddservices.cpp文件的。

我在CNC下使用的编译器如下:
C:Microsoft Visual C++ Compiler 15.0 (amd64)
C++:Microsoft Visual C++ Compiler 15.0 (amd64)
我在CNC下使用的调试器如下:
Auto-detected CDB at C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\cdb.exe
基于的Qt Creator版本:
5.12.10

我的问题如下:
(1)在DDS库中源文件名为“ddservices”,为什么在报错信息中会显示“ddservicesd”,末尾的这个字母“d”是系统自动添加的么?
(2)在上述提到的“LNK1104”报错信息,是否可能是编译器的原因。

我尝试进行了以下的解决方式:
在项目的所有文件中有部分的文件依靠着DDS库来运行,我在项目的pro文件中将“SOURCES +=”和“HEADERS +=”下的所有指定了需要编译并包含在项目中的C++源文件和头文件都删除然后构建,此时构建成功,LNK1104报错消失。然后恢复这些文件再构建,此时编译依旧成功。但是当第三次编译或者构建时,就会发生上述提到的LNK1104的错误。

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-11 10:55
    关注

    引自免费微信小程序:皆我百晓生

    针对你遇到的问题,让我们逐一分析并提供可能的解决方案。

    问题1:为什么会出现“ddservicesd.lib”而不是“ddservices.lib”?

    在C++编译环境中,库名后缀通常用于表示不同的编译配置。例如,“d”通常代表debug版本的库,而没有后缀的则可能是release版本。这表明你的项目在某个地方请求了“ddservices”的debug版本,而你的DDS库可能只包含了release版本的“ddservices.lib”。

    解决方案:

    1. 确认DDS库版本: 确认你的DDS库中是否同时包含了debug和release版本的库文件。如果是,确保在项目设置中选择正确的库版本。

    2. 检查编译配置: 在CNC的项目配置中,检查你的编译类型(debug/release)。确保与你DDS库中的配置相匹配。

    3. 修改项目配置: 如果你的项目被配置为debug模式,但DDS库只有release版本,你可能需要重新编译DDS库以生成debug版本,或者更改项目配置为release模式。

    问题2:LNK1104错误是否与编译器有关?

    “LNK1104”错误通常意味着链接器无法找到指定的库文件。虽然这可能与编译器的配置有关,但更常见的是由于路径设置、库文件名或库版本不正确造成的。

    解决方案:

    1. 检查库路径: 在项目设置中,确保已正确添加DDS库的目录路径到链接器的附加目录中。

    2. 检查依赖项: 确保所有依赖于DDS的源文件都正确包含了必要的头文件,并且在项目中正确声明了库依赖。

    3. 清理并重新构建: 执行qmake cleanqmake命令,彻底清理项目后再重新构建,这有助于解决因缓存或临时文件引起的错误。

    4. 检查编译日志: 查看详细的编译日志,寻找是否有其他相关错误或警告,这些可能会提供额外的线索。

    具体步骤:

    1. 打开项目设置: 在CNC中打开你的项目设置,进入“Build & Run”->“Build Settings”->“Linker”。

    2. 编辑附加库路径: 在“Additional Libraries Directories”中添加DDS库的目录路径。

    3. 添加库文件: 在“Libraries”字段中添加-lDDServices-lDDServicesD,取决于你的项目配置。

    4. 保存并重新构建: 保存设置并重新构建项目。

    如果以上步骤仍然无法解决问题,你可能需要进一步检查DDS库的编译过程,确保它正确地生成了你项目所需的库版本。此外,检查项目中所有引用DDS库的部分,确保没有遗漏或错误的引用。

    请根据上述建议进行操作,如果问题仍未解决,可能需要更深入地检查DDS库的编译脚本或项目文件,以确保所有设置一致且正确。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 1月5日
  • 已采纳回答 12月28日
  • 创建了问题 6月11日