Windows10下CLion配置Gurobi952 C++项目遇链接错误求助
Windows10下CLion配置Gurobi952 C++项目的链接错误解决方法
问题描述
在Windows10的CLion中配置Gurobi952的C项目,许可证已在Java/Python环境正常使用,但C项目编译失败:
初始CMakeLists.txt内容
cmake_minimum_required(VERSION 3.13) project(CHEO) set(CMAKE_CXX_STANDARD 20) include_directories(C:/gurobi952/win64/include) add_executable(CHEO main.cpp)
主文件main.cpp内容
#include "iostream" #include "gurobi_c++.h" using namespace std; int main(int argc, char *argv[]) { try { cout << "Hello" << endl; // Create an environment GRBEnv env = GRBEnv(true); } catch(...) { cout << "Exception during optimization" << endl; } return 0; }
编译链接错误
[1/2] Building CXX object CMakeFiles/CHEO.dir/main.cpp.obj [2/2] Linking CXX executable CHEO.exe FAILED: CHEO.exe cmd.exe /C "cd . && C:\PROGRA~1\JETBRA~1\CLION2~1.4\bin\mingw\bin\G__~1.EXE -g CMakeFiles/CHEO.dir/main.cpp.obj -o CHEO.exe -Wl,--out-implib,libCHEO.dll.a -Wl,--major-image-version,0,--minor-image-version,0 -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ." C:\Program Files\JetBrains\CLion 2022.2.4\bin\mingw\bin/ld.exe: CMakeFiles/CHEO.dir/main.cpp.obj:C:/Users/USERNAME/CLionProjects/CHEO/main.cpp:12: undefined reference to `GRBEnv::GRBEnv(bool)' C:\Program Files\JetBrains\CLion 2022.2.4\bin\mingw\bin/ld.exe: CMakeFiles/CHEO.dir/main.cpp.obj: in function `main': C:/Users/USERNAME/CLionProjects/CHEO/main.cpp:48: undefined reference to `GRBEnv::~GRBEnv()' collect2.exe: error: ld returned 1 exit status ninja: build stopped: subcommand failed.
尝试官方CMake方案后的错误
CMake Error: The following variables are used in this project, but they are set to NOTFOUND. Please set them or make sure they are set and tested correctly in the CMake files: GUROBI_CXX_LIBRARY linked by target "gurobi-template" in directory C:/Users/USERNAME/CLionProjects/CHEO linked by target "gurobi-template" in directory C:/Users/USERNAME/CLionProjects/CHEO
解决方案
方法一:直接修改CMakeLists.txt(新手首选)
初始配置仅添加了头文件路径,但未链接Gurobi的库文件,这是链接错误的核心原因。按以下步骤修改:
- 确认Gurobi库文件路径:
C:/gurobi952/win64/lib,其中包含对应编译器的库文件(MSVC对应gurobi_c++mdd2020.lib,MinGW对应libgurobi_c++.a)。 - 修改后的CMakeLists.txt:
cmake_minimum_required(VERSION 3.13) project(CHEO) set(CMAKE_CXX_STANDARD 20) # 设置Gurobi的头文件和库路径 set(GUROBI_INCLUDE_DIR "C:/gurobi952/win64/include") set(GUROBI_LIB_DIR "C:/gurobi952/win64/lib") # 引入头文件 include_directories(${GUROBI_INCLUDE_DIR}) # 添加库搜索路径 link_directories(${GUROBI_LIB_DIR}) add_executable(CHEO main.cpp) # 根据编译器类型链接对应库 if(MSVC) # 适配MSVC编译器(CLion默认工具链多为MSVC) target_link_libraries(CHEO gurobi95 gurobi_c++mdd2020) else() # 适配MinGW编译器 target_link_libraries(CHEO gurobi95 gurobi_c++) endif()
说明:
- 可通过CLion的
Settings→Build, Execution, Deployment→Toolchains查看当前使用的编译器类型。 gurobi95是Gurobi核心库,gurobi_c++xxx是C接口库,后缀随C标准和编译器变化。
方法二:修复官方FindGUROBI.cmake配置
官方脚本可能无法自动识别库路径,手动指定Gurobi安装根目录即可:
- 将官方
FindGUROBI.cmake放入项目新建的cmake文件夹中。 - 修改CMakeLists.txt:
cmake_minimum_required(VERSION 3.13) project(CHEO) set(CMAKE_CXX_STANDARD 20) # 添加自定义cmake脚本路径 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake") # 手动指定Gurobi安装根目录 set(GUROBI_ROOT "C:/gurobi952/win64") # 查找Gurobi库 find_package(GUROBI REQUIRED) add_executable(CHEO main.cpp) # 链接Gurobi库 target_link_libraries(CHEO ${GUROBI_CXX_LIBRARY} ${GUROBI_LIBRARY})
额外注意事项
- 确保编译器架构与Gurobi一致:Gurobi为win64版本,需使用64位编译器(CLion工具链选择x86_64版本)。
- 运行程序前,需将
C:/gurobi952/win64/bin/gurobi95.dll复制到可执行文件同目录,或把该路径添加到系统环境变量PATH中,否则会提示找不到动态库。
内容的提问来源于stack exchange,提问作者mdslt
相关产品推荐
相关产品推荐

