我剛剛將Gurobi更新到Linux(Ubuntu)上的7.5.1版 - 這是可用的最新版本。無法編譯版本7.5.1中的Gurobi示例
問題任我試圖編譯使用Gurobi任何代碼 - 例如,包括在/opt/gurobi751/linux64/examples
的例子中,我只是得到未定義參考誤差的一個字符串(例如undefined reference to GRBModel::set(...)
)。如果我可以訪問目錄/opt/gurobi751/linux64/examples/build
並運行命令make run_diet_c++
並編譯並運行,我會考慮解決問題。
嘗試的修復
(1)我在.bashrc
文件中設置$GUROBI_HOME
- 它指向正確的目錄。 $LD_LIBRARY_PATH
和$PATH
也已更新。他們都指向正確的目錄。
(2)我有一個有效的Gurobi許可證。如果我編寫.lp
文件並像gurobi_cl model.lp
那樣運行它,它會正確運行。運行gurobi_cl --version
給出預期的輸出(,即版本7.5.1)。 (3)如果我嘗試編譯C版本(使用make run_diet_c
),一切都按預期工作。
更多信息
我創建了下面的測試文件在我的主目錄:
#include <stdio.h>
#include "gurobi_c++.h"
int main(int argc, char **argv)
{
GRBVar x;
std::cout << "Hello, world!" << std::endl;
return 0;
}
然後我編譯使用G ++使用下面的命令:
g++ -Wall test.cpp -o executable -I/opt/gurobi751/linux64/include -L/opt/gurobi751/linux64/lib -lgurobi_c++ -lgurobi75
這編譯和無怨無悔地運行。然而,我試過這個例子:
並編譯它與相同的命令,並失敗。所以它看起來像包括聲明工作正常,但不知何故它沒有正確鏈接到庫?
如果需要更多信息,請讓我知道。另外,如果不清楚,我不太瞭解彙編和鏈接過程,這可能會阻礙我的發展。
Ubuntu發佈什麼?來自默認C++編譯器的任何更改?C示例是否可以編譯並從Makefile運行? –
@GregGlockner Ubuntu 16.04 LTS。只需使用帶有標誌的標準'g ++'編譯器即可。 C示例不會*編譯和運行。 –
@GregGlockner關於C例子的更多細節:當我嘗試在加載共享庫時出現錯誤:libgurobi75.so:無法打開共享對象文件:沒有這樣的文件或目錄。但是,(1)'libgurobi75.so'位於'include'目錄中,並且(2)它仍然生成可正確運行的可執行文件... !! –