2017-05-03 27 views
0

我試圖編譯它使用GSL程序,其實我已經能夠成功地編譯使用如何使用在自定義位置安裝的特定庫版本進行鏈接和編譯?

g++ -o program program.c prog0.o -L/usr/local/lib -lgsl -lgslcblas -lm 

我的問題我的本地機器是我需要在編譯一個工作的機器上這個節目一個共享的系統,但是我知道這個程序不能用最新版本的GSL進行編譯,所以我需要安裝和使用舊版本。 我在自己的系統上使用默認安裝完成了這項工作,所以相關文件位於本地機器的/ usr/local/lib目錄下,編譯工作適用於上述命令。

但是由於工作機器在共享系統中,所以我不能混淆默認目錄,所以我在工作機器上的/ home/myname/gsl /目錄下安裝了正確的GSL版本。 因此,在工作機器上,文件夾/ home/myname/gsl/lib包含與我的機器上的文件夾/ usr/local/lib相同的相關文件。

現在我做了各種嘗試,試圖告訴G ++使用這個定製的安裝文件夾,我認爲會回落到

g++ -o program program.c prog0.o -L/home/myname/gsl/lib -lgsl -lgslcblas -lm 

,但沒有成功。無論我做了什麼G ++總是用安裝在共享系統上的GSL版本,甚至只用

g++ -o program program.c prog0.o 

我纔開始編程的C/C++不久前,只知道如何編寫程序非常基礎,所以這個連接的東西仍然總是讓我困惑.. 但是據我可以告訴-L/dir /應該告訴g ++在/ dir /中使用該庫和-lgsl -lgslcblas是它應該在該庫中查找的文件...? 但似乎g ++並不關心我在這裏講的是什麼庫,它似乎總是使用共享工作系統的PATH中的任何東西,這似乎包含了我不能使用的GSL的最新版本。但我也無法更改PATH,因爲我只能訪問我自己的工作系統上的子目錄。 那麼,我該如何告訴g ++忽略GSL的默認版本,並使用我在/ home/myname/gsl手動安裝的版本/?

+0

'G ++'是C++編譯器的前端,但你的文件使用'.c'這是C正常。獲取正確的語言,他們是不同的語言!沒有語言「C/C++」! – Olaf

+0

你有沒有試過gcc? –

+0

@Olaf err ..我得到提供的C程序和不喜歡C的工件,所以我用C++來擴展它們,並在擺脫C ..現在仍然是兩者的混合,但W/e只要它有效我現在有更高的優先級。比如讓這個編譯工作。 – Shiwayari

回答

1

我想出了答案,其實很簡單。問題只是我不瞭解正確使用外部庫並試圖修正編譯命令是錯誤的方法。

在program.c代碼,GSL附帶

#include <gsl/gsl_blas.h> 

等。當然,「<>」直接告訴編譯器查看已知的包含目錄,其中最新的GSL安裝在共享系統上。因此,使用定製版本的方式僅僅是使用

#include "/home/myname/gsl/lib/gsl_blas.h" 

等,直接指定我想使用我的自定義安裝。 然後我編譯

g++ -o program program.c prog0.o /home/myname/gsl/lib/libgsl.so /home/myname/gsl/lib/libgslcblas.so -lm 

它編譯成功。

(這帶來了其他一些不清楚的地方對我來說,但至少這一特定問題就迎刃而解了。)

相關問題