Linux下配置Gurobi求解器的C++接口
Gurobi求解器的安装方法可以参考上一篇文章:https://blog.csdn.net/CUGB_NICET/article/details/126701756
1. 生成动态链接库
生成libgurobi_c++.a并将它拷贝到lib文件夹下:
cd /opt/gurobiXXX/linux64/src/build/
sudo make
sudo cp libgurobi_c++.a ../../lib/
此处XXX替换成你的gurobi版本号
2. 配置Cmakelists
2.1 添加.camke文件
在Cmakelist所在目录下添加文件FindGUROBI.cmake
# ------------------------------------------------------------------------------
# This file sets up Gurobi for CMake. Once done this will define
#
# GUROBI_FOUND - system has GUROBI
# GUROBI_INCLUDE_DIRS - the GUROBI include directories
# GUROBI_LIBRARIES - Link these to use GUROBI
#
# In your CMakeLists file, you need to add, e.g. (modify it if necessary):
# if (GUROBI_FOUND)
# message(STATUS "Gurobi include dir: " ${GUROBI_INCLUDE_DIRS})
# message(STATUS "Gurobi libraries: " ${GUROBI_LIBRARIES})
# target_compile_definitions(${PROJECT_NAME} PUBLIC HAS_GUROBI)
# target_include_directories(${PROJECT_NAME} PRIVATE ${GUROBI_INCLUDE_DIRS})
# target_link_libraries(${PROJECT_NAME} PRIVATE ${GUROBI_LIBRARIES})
# endif()
# ------------------------------------------------------------------------------
# Is it already configured?
if (NOT GUROBI_FOUND)
# Hardcoded search paths
set(SEARCH_PATHS_FOR_HEADERS
"$ENV{GUROBI_HOME}/include"
"/Library/gurobi952/mac64/include"
"C:\\dev\\gurobi952\\win64\\include"
)
set(SEARCH_PATHS_FOR_LIBRARIES
"$ENV{GUROBI_HOME}/lib"
"/Library/gurobi952/mac64/lib"
"C:\\dev\\gurobi952\\win64\\lib"
)
find_path(GUROBI_INCLUDE_DIR gurobi_c++.h
PATHS ${SEARCH_PATHS_FOR_HEADERS}
)
find_library( GUROBI_C_LIBRARY
NAMES gurobi90 gurobi95 libgurobi
PATHS ${SEARCH_PATHS_FOR_LIBRARIES}
)
find_library( GUROBI_CXX_LIBRARY_DEBUG
NAMES gurobi_c++ gurobi_c++mdd2017
PATHS ${SEARCH_PATHS_FOR_LIBRARIES}
)
find_library( GUROBI_CXX_LIBRARY_RELEASE
NAMES gurobi_c++ gurobi_c++md2017
PATHS ${SEARCH_PATHS_FOR_LIBRARIES}
)
# setup header file directories
set(GUROBI_INCLUDE_DIRS ${GUROBI_INCLUDE_DIR})
# setup libraries files
set(GUROBI_LIBRARIES
debug ${GUROBI_CXX_LIBRARY_DEBUG}
optimized ${GUROBI_CXX_LIBRARY_RELEASE}
${GUROBI_C_LIBRARY}
)
endif()
# Check that Gurobi was successfully found
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(GUROBI DEFAULT_MSG GUROBI_INCLUDE_DIRS)
find_package_handle_standard_args(GUROBI DEFAULT_MSG GUROBI_LIBRARIES)
# Hide variables from CMake-Gui options
mark_as_advanced(GUROBI_LIBRARIES GUROBI_INCLUDE_DIRS GUROBI_INCLUDE_DIR)
2.2 配置Cmakelist
在Cmakelist文件中增加以下内容:
include(./FindGUROBI.cmake)
include_directories(
${GUROBI_INCLUDE_DIRS}
)
在需要使用gurobi的可执行文件添加相应的动态链接库:
target_link_libraries(libcontroller ##把libcontroller换成你的文件的名字
${catkin_LIBRARIES}
${GUROBI_LIBRARIES}
)
参考文献:
1.大佬写的文章:https://blog.csdn.net/qq_16775293/article/details/122699629
2.官方文档:https://www.gurobi.com/documentation/9.5/quickstart_linux/software_installation_guid.html