cmakelists关于连接三方库提示错误:LNK:无法打开的“../.obj”

本文详细介绍了在CMake中使用绝对路径链接库时出现错误的原因,指出问题在于未包含库文件的全名及后缀。提供了一个正确的CMake配置示例,展示了如何正确指定库的绝对路径,确保编译过程能够找到所需的库文件。

0.简介

在搭建仓库时,之前一直cmake使用的是相对路径,在写相对路径时,十分繁琐,所以之后开始重新编写相关的cmake,全部将三方库的链接路径更改为绝对路径。但是会出现如下错误
在这里插入图片描述

1.错误原因分析

cmake编写错误:在相关的.cmake中实现如下

cmake_minimum_required(VERSION 3.0)

set(OPENCV_DIR
    ${CMAKE_SOURCE_DIR}/third_party/opencv/lib/opencv_world420d
)

导致错误的原因是:当添加绝对路径时,应该将库的全称及后缀全部添加
如果用相对路径则只需要将库的全程添加

2.正确cmake编写

cmake_minimum_required(VERSION 3.0)

set(OPENCV_DIR
    ${CMAKE_SOURCE_DIR}/third_party/opencv/lib/opencv_world420d.lib
    ${CMAKE_SOURCE_DIR}/third_party/opencv/lib/opencv_world420.lib
)
### LNK1104 无法打开文件 shell32.lib 的解决方案 LNK1104 错误通常表示链接器在构建过程中无法找到指定的库文件。以下是一些可能的原因和解决方案: #### 1. Windows SDK 配置问题 如果使用的是 Visual Studio 或 Qt Creator,可能是因为 Windows SDK 没有正确配置或安装。shell32.lib 是 Windows SDK 的一部分,因此需要确保安装了正确的版本[^1]。 - **检查 Windows SDK 是否已安装**:打开 Visual Studio 安装程序,选择“修改”,然后确认是否安装了所需的 Windows SDK 版本。 - **更新环境变量**:确保系统环境变量中包含 Windows SDK 的路径。例如: ```plaintext C:\Program Files (x86)\Windows Kits\10\Lib\<version>\um\x64 ``` #### 2. 使用 `link_directories` 或 `target_link_libraries` 如果使用 CMake 构建项目,可以通过以下方式解决链接问题[^2]。 - **`link_directories` 方法**: 在 CMakeLists.txt 中添加以下内容,指定 shell32.lib 所在目录: ```cmake link_directories("C:/Program Files (x86)/Windows Kits/10/Lib/<version>/um/x64") target_link_libraries(your_target_name PRIVATE shell32.lib) ``` - **`target_link_libraries` 方法**: 直接链接库文件,避免手动设置路径: ```cmake target_link_libraries(your_target_name PRIVATE shell32.lib) ``` #### 3. Qt 和 Visual Studio 的兼容性问题 如果使用 Qt 和 Visual Studio 的组合开发,可能需要重新配置 Qt 环境以确保与 Visual Studio 的工具链兼容[^4]。 - **检查 Qt 版本和编译器匹配**:确保使用的 Qt 版本与 Visual Studio 的编译器版本一致。 - **重新生成项目文件**:删除旧的项目文件(如 .pro.user 文件),然后重新生成。 #### 4. MinGW 编译器的问题 如果使用 MinGW 编译器,可能会遇到类似的链接问题[^3]。 - **检查编译器路径**:确保 MinGW 的路径中包含必要的库文件。 - **手动添加库路径**:在编译命令中显式指定库路径,例如: ```bash g++ -o output.exe main.o -L"C:/Program Files (x86)/Windows Kits/10/Lib/<version>/um/x64" -lshell32 ``` #### 5. 其他可能的原因 - **权限问题**:确保对相关目录有读取权限[^5]。 - **路径冲突**:检查是否存在多个版本的 Windows SDK 或库文件,可能导致路径冲突。 ```python # 示例代码:检查 Windows SDK 路径 import os sdk_path = r"C:\Program Files (x86)\Windows Kits\10\Lib" if os.path.exists(sdk_path): print(f"Windows SDK found at {sdk_path}") else: print("Windows SDK not found") ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值