2017-10-16 56 views
2

我剛剛將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 

這編譯和無怨無悔地運行。然而,我試過這個例子:

​​

並編譯它與相同的命令,並失敗。所以它看起來像包括聲明工作正常,但不知何故它沒有正確鏈接到庫?

如果需要更多信息,請讓我知道。另外,如果不清楚,我不太瞭解彙編和鏈接過程,這可能會阻礙我的發展。

+0

Ubuntu發佈什麼?來自默認C++編譯器的任何更改?C示例是否可以編譯並從Makefile運行? –

+0

@GregGlockner Ubuntu 16.04 LTS。只需使用帶有標誌的標準'g ++'編譯器即可。 C示例不會*編譯和運行。 –

+0

@GregGlockner關於C例子的更多細節:當我嘗試在加載共享庫時出現錯誤:libgurobi75.so:無法打開共享對象文件:沒有這樣的文件或目錄。但是,(1)'libgurobi75.so'位於'include'目錄中,並且(2)它仍然生成可正確運行的可執行文件... !! –

回答

1

您需要爲您的g ++版本編譯libgurobi_C++。

首先,進入該文件夾

cd /opt/gurobi751/linux64/src/build/ 

make 

現在,你需要編譯的文件複製到lib文件夾:

cp libgurobi_c++.a ../../lib/

您將編譯並跑。

+1

我忘記了這個問題。事實上,我的g ++已經更新到版本5,但我沒有意識到,這是造成這個問題的原因。 –