gpt4 book ai didi

c++ - Gurobi 和 C++ - 如何使用 Clion 协同工作

转载 作者:太空宇宙 更新时间:2023-11-04 13:29:23 27 4
gpt4 key购买 nike

首先,我是 C++ 的新手,所以如果您知道答案,请耐心等待我 ;)。这是我的问题:我想在 C++ 代码中使用 Gurobi 解决 IP。代码本身看起来很好,因为没有标记为错误的表达式。但是,当我运行代码时,我收到以下错误报告:

Undefined symbols for architecture x86_64: 

还有很多这样的行:

"GRBLinExpr::GRBLinExpr(GRBVar, double)", referenced from: 
bridge_problem::max_flow_lp(time_expanded_network&, lemon::ListDigraph&, lemon::DigraphExtender<lemon::ListDigraphBase>::ArcMap<int>&, lemon::DigraphExtender<lemon::ListDigraphBase>::ArcMap<int>&, lemon::DigraphExtender<lemon::ListDigraphBase>::NodeMap<int>&) in bridge_problem.cpp.o

我想错误出在我的 CMakeList.txt 文件中。这个文件是自动创建的,因为我使用的是 Clion,为了包含 gurobi,我输入了这些额外的行:

include_directories(/Library/gurobi604/mac64/include) 
link_directories(/Library/gurobi604/mac64/lib/libgurobi_c++.a)
link_directories(/Library/gurobi604/mac64/lib/libgurobi60.so)

非常感谢任何帮助,如果您需要更多信息,请告诉我。 (以防万一我使用 Mac 很重要)。

编辑:自从找到这个代码后,我更改了我的制作代码: https://github.com/joschu/trajopt/blob/master/cmake/modules/FindGUROBI.cmake我更改了版本,因为我有 gurobi604,但它仍然不起作用。我的新错误信息是:

fatal error: 'gurobi_c++.h' file not found #include "gurobi_c++.h"

没想到

find_path(GUROBI_INCLUDE_DIR
NAMES gurobi_c++.h
PATHS "$ENV{GUROBI_HOME}/include"
"/Library/gurobi604/mac64/include"
"C:\\libs\\gurobi604\\include"
)

应该很容易找到。有什么建议吗?

最佳答案

从您的 CMakeLists.txt 的一小段摘录中,我希望您应该使用 target_link_libraries而不是 link_directories

如果可能的话,我通常建议链接到任何库的静态版本而不是共享的(即在这种情况下更喜欢“libgurobi_c++.a”而不是“libgurobi60.so”,假设它们是同一个库,只是编译方式不同).

因此,如果您的 exe 名为 MyExe,您可以:

target_link_libraries(MyExe /Library/gurobi604/mac64/lib/libgurobi_c++.a)

此外,最好避免在 CMakeLists.txt 中指定硬编码路径。尽管“libgurobi_c++.a”的拷贝位于“/Library/gurobi604/mac64/lib/”中,但其他用户或不同平台上的情况并非如此。

您可以通过让 CMake“查找”库来避免这种情况,例如调用 find_library :

find_library(Gurobi NAMES gurobi_c++)
if(NOT Gurobi)
message(FATAL_ERROR "Failed to find Gurobi lib. Try setting CMAKE_PREFIX_PATH")
endif()
target_link_libraries(MyExe ${Gurobi})

然后,当您运行 CMake 时,您只需告诉它 Gurobi 库在哪里。我不确定你是如何在 CLion 中做到这一点的,但是例如,如果你从命令行运行 CMake,你会这样做:

cmake . -DCMAKE_PREFIX_PATH=/Library/gurobi604/mac64

关于c++ - Gurobi 和 C++ - 如何使用 Clion 协同工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32114459/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com