古罗比和C++;-它是如何使用Clion一起工作的 首先,我对C++完全陌生,所以如果你知道答案,请对我耐心点。我的问题是: 我想用Gurobi在C++代码中解决IP问题。代码本身看起来不错,因为没有标记为错误的表达式。但是,当我运行代码时,会得到以下错误报告: Undefined symbols for architecture x86_64:

古罗比和C++;-它是如何使用Clion一起工作的 首先,我对C++完全陌生,所以如果你知道答案,请对我耐心点。我的问题是: 我想用Gurobi在C++代码中解决IP问题。代码本身看起来不错,因为没有标记为错误的表达式。但是,当我运行代码时,会得到以下错误报告: Undefined symbols for architecture x86_64:,c++,cmake,clion,gurobi,C++,Cmake,Clion,Gurobi,还有很多这样的句子: "GRBLinExpr::GRBLinExpr(GRBVar, double)", referenced from: bridge_problem::max_flow_lp(time_expanded_network&, lemon::ListDigraph&, lemon::DigraphExtender<lemon::ListDigraphBase>::ArcMap<int>&, lemon::DigraphExtend

还有很多这样的句子:

"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 
非常感谢您的帮助,如果您需要更多信息,请告诉我。(如果我使用mac电脑很重要)

编辑:找到此代码后,我更改了生成代码: 自从我有了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的小摘录中,我希望您应该使用而不是
链接目录

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

因此,如果您的exe被称为
MyExe
,您可以执行以下操作:

target_link_库(MyExe/Library/gurobi604/mac64/lib/libgurobi_c++.a)
此外,几乎总是最好避免在CMakeLists.txt中指定硬编码路径。尽管您的“libgurobi_c++.a”副本存在于“/Library/gurobi604/mac64/lib/”中,但其他用户或不同平台上的用户不会这样做

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

find_库(Gurobi命名为Gurobi_c++)
如果(不是古洛比)
消息(致命错误“找不到古罗比库。请尝试设置CMAKE_前缀_路径”)
endif()
目标链接库(MyExe${Gurobi})
然后,当您运行CMake时,您只需要告诉它Gurobi库在哪里。我不确定如何在CLion中实现这一点,但例如,如果您从命令行运行CMake,您将执行以下操作:

cmake-DCMAKE_PREFIX_PATH=/Library/gurobi604/mac64

从您的CMakeLists.txt的小摘录中,我希望您应该使用而不是
链接目录

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

因此,如果您的exe被称为
MyExe
,您可以执行以下操作:

target_link_库(MyExe/Library/gurobi604/mac64/lib/libgurobi_c++.a)
此外,几乎总是最好避免在CMakeLists.txt中指定硬编码路径。尽管您的“libgurobi_c++.a”副本存在于“/Library/gurobi604/mac64/lib/”中,但其他用户或不同平台上的用户不会这样做

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

find_库(Gurobi命名为Gurobi_c++)
如果(不是古洛比)
消息(致命错误“找不到古罗比库。请尝试设置CMAKE_前缀_路径”)
endif()
目标链接库(MyExe${Gurobi})
然后,当您运行CMake时,您只需要告诉它Gurobi库在哪里。我不确定如何在CLion中实现这一点,但例如,如果您从命令行运行CMake,您将执行以下操作:

cmake-DCMAKE_PREFIX_PATH=/Library/gurobi604/mac64

这里没有人能帮我吗?我错过什么了吗?这里没有人能帮我吗?我遗漏了什么吗?谢谢弗雷泽,我按照你的建议更改了代码:find_library(Gurobi NAMES Gurobi_c++)if(NOT Gurobi)消息(致命错误“find_lib.faild”find_PREFIX_PATH)。尝试设置CMAKE_PREFIX_PATH“)endif()include_目录(${Gurobi})target_链接_库(MyProjekt${Gurobi})现在我在CMakeLists.txt:39(消息):找不到Gurobi库时出现了新错误:CMake error。尝试设置CMAKE_PREFIX_path我尝试在开始时通过CMAKE_PREFIX_path(/Library/gurobi604/mac64)设置CMAKE_PREFIX_path,但显然是CMAKE_PREFIX。。。是未知命令。我想对于克莱恩来说,我不必给卡马克打电话。因为我只是按一个按钮跑步。所以我不知道在哪里输入前缀路径。谢谢弗雷泽,我按照你的建议更改了代码:find_library(Gurobi NAMES Gurobi_c++)if(NOT Gurobi)消息(致命错误“find_lib”无法找到Gurobi lib。请尝试设置CMAKE_Prefix_path”)endif()包括目录(${Gurobi})目标链接_库(MyProjekt${Gurobi})现在我在CMakeLists.txt:39(消息):找不到Gurobi库时出现了新错误:CMake error。尝试设置CMAKE_PREFIX_path我尝试在开始时通过CMAKE_PREFIX_path(/Library/gurobi604/mac64)设置CMAKE_PREFIX_path,但显然是CMAKE_PREFIX。。。是未知命令。我想对于克莱恩来说,我不必给卡马克打电话。因为我只是按一个按钮跑步。所以我不确定在哪里输入前缀路径。
find_path(GUROBI_INCLUDE_DIR
      NAMES gurobi_c++.h
      PATHS "$ENV{GUROBI_HOME}/include"
              "/Library/gurobi604/mac64/include"
             "C:\\libs\\gurobi604\\include"
      )