错误LNK1104:无法打开文件“GKlib.lib”

内容摘要:

笔者在Visual Studio 2022上配置metis软件包、vcpkg后运行ue5-nanite-core代码时,编译后成功后,运行出现LNK1104:无法打开文件“GKlib.lib”问题。经过查询以后发现metis编译后的GKlib文件夹中不存在GKlib.lib这个文件,为此给出以下解决办法。

关于metis安装配置:Windows+VS2022安装METIS软件包-优快云博客

关于vcpkg安装配置:Windows安装vcpkg教程(VS2022)-优快云博客

目录

一、问题描述

二、开发环境

三、添加GKlib.lib

四、在VS上配置库路径


一、问题描述

笔者在Visual Studio 2022上配置metis软件包、vcpkg后运行ue5-nanite-core代码时,编译后成功后,运行出现LNK1104:无法打开文件“GKlib.lib”问题,如下图所示。NK1104 错误表示链接器无法找到或打开指定的库文件,其中metis软件包是通过CMake编译生成的,因此可能是CMake编译过程中出现的问题,或解压metis过程中文件缺失。

GKlib.lib 是一个库文件,通常用于链接器在生成可执行文件或动态库时引用。

二、开发环境

1.操作系统:Win10/Win11

2.开发工具:Visual Studio 2022

3.开发语言:C/C++

4.METIS版本:5.1.0

5.CMake版本:3.21.5

三、添加GKlib.lib

若在GKlib文件夹下无法查询到GKlib.lib文件,则是CMake 并未明确定义生成 GKlib.lib 文件的目标,这是导致链接错误的主要原因。(若可以查询到GKlib.lib文件,直接跳转到步骤3.确认子模块的构建。)

1. 修改 GKlib 的 CMakeLists.txt

确保GKlib文件夹下的CMakeLists.txt包含生成静态库或动态库的指令,即以下内容:

(此处以添加静态库为例,要注意和metis文件夹下CMakeLists.txt的库的类型统一,都为静态库或都为动态库)

# 添加一个静态库目标
add_library(GKlib STATIC ${GKLIB_SRC} ${GKLIB_HEADERS})

若无该指令,添加至GKlib文件夹下的CMakeLists.txt中,保存文件。

2.使用CMake构建GKlib.lib

在metis/GKlib文件夹下新建一个独立的构建目录,命名为bulid(空文件夹),如下图所示。

 打开终端,cd到该build文件夹,执行以下命令以生成构建文件:

cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../install

 如下图所示。

参数说明:

  • ..:表示 CMakeLists.txt 文件的路径在上一层目录。
  • -DCMAKE_BUILD_TYPE=Release:指定生成 Debug版本。
  • -DCMAKE_INSTALL_PREFIX=../install:指定安装目录。

在配置完成后,运行以下命令以编译库: 

(保证前后都为Debug编译模式或都为Release编译模式)

cmake --build . --config Debug

编译完成后,生成的库文件会出现在build或指定的输出目录中,如下图所示。

3.确认子模块的构建

在metis的子目录的 CMakeLists.txt 中,应正确设置目标文件和依赖。例如,在include、libmetis(关键)、programs子目录中,可能需要明确链接 GKlib到metis库: 

# Link GKlib to metis.
target_link_libraries(metis PRIVATE GKlib)

四、在VS上配置库路径

1.链接器 > 常规 > 附加库目录 (Linker > General > Additional Library Directories)

添加包含 GKlib.lib 的目录路径,如下图所示。

2.链接器 > 输入 > 附加依赖项 (Linker > Input > Additional Dependencies)

确认 GKlib.lib 是否在其中。如果缺失,手动添加,如下图所示。

在 Visual Studio 中选择 生成 (Build) > 清理解决方案 (Clean Solution),然后重新生成项目。

总结:

  • 确保 GKlib 和 metis 主项目使用相同的构建配置(Debug 或 Release)。
  • 在主项目中明确指定 GKlib 的库路径,区分 Debug 和 Release。
  • 考虑使用 CMake 的子目录或配置导入功能来更好地管理库依赖。

欢迎交流🌹🌹

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值