2015-06-03 49 views
0

我想在我的Windows 7機器上用MinGW編譯一個簡單的C程序,使用GCC和MPIR。我成功安裝了MPIR(我猜)配置,make,make check和make install(沒有使用「sudo」 - 這是什麼?)。MPIR gcc編譯 - 找不到-lmpir

該程序被稱爲「mytest.cpp」,位於MPIR的頂級文件夾中,即C:/MPIR/mpir-2.7.0/,其中「mpir.h」也坐在(是「 (?正確的是有幾個?)mpir.h):/MPIR/mpir-2.7:

#include "mpir.h" 
using namespace std; 

int main() 
{ 
    mpz_t z; 
    mpz_init(z); 
    return 0; 
} 

我試圖通過

的gcc -o mytest.c mytest的-lmpir -I/C編譯希望GCC能夠找到mpir.h,「-lmpir」,因爲一位有用的開發者告訴我;但隨後說:

「C:/ MinGW的/ [...] /bin/ld.exe:找不到-lmpir」

其中 「[...]」 代表某些目錄向上在「minGW」目錄內下爬。但是,我使用的是目前位於C:/MPIR/mpir-2.7.0/目錄的 中的shell。

出了什麼問題?如何讓GCC找到mpir文件?編譯選項「-I」應該拼寫不同嗎?我也聽說過一些「-L」選項,但在任何地方都找不到。謝謝。

回答

0

好的,我修好了。
總結,臨界點是:
- 海灣合作委員會選項的順序很重要:「-o mytest」需要結束,「 - lname」需要在「-Ldir」之前但之後;
- 路徑末尾應該有「.libs」,因爲這是庫所在的位置(即使它們不需要命名爲libmpir.a)
- (至少在MinGW中)工作格式爲c: /MPIR/mpir-2.7.0/.libs(因而是絕對的,也從/ usr /本地/或其他地方)

什麼工作了,例如:

$ GCC mytest.c -Lc:/ MPIR /mpir-2.7.0/.libs -lmpir -o mytest的
$ GCC mytest.c -Lc:/MPIR/mpir-2.7.0/.libs -lmpir.dll -o mytest的

最佳。

+0

嗯。兩週後(不嘗試),上面仍然沒有錯誤地編譯,但是當通過「mytest」執行程序時,它抱怨說「程序無法啓動,因爲libmpir-16.dll丟失。再次安裝程序。 「但是這個文件實際上是坐在C:/MPIR/mpir-2.7.0/.libs目錄中的(例如,mpir.a或libmpir.a不是!)或者我需要在其他地方查找它?我已經將MinGW/bin和mpir-2.7.0 /路徑添加到PATH環境變量中......沒有任何改進。他們還能在哪裏?他們應該在哪裏? – Futurist

1

變化

GCC mytest.c -o mytest的-lmpir -I/C:/MPIR/mpir-2.7.0/

GCC mytest的。 c -o mytest -lmpir -IC:/MPIR/mpir-2.7.0/LC:/MPIR/mpir-2.7.0

你不需要a/in f r的C:和-L標誌告訴鏈接器在哪裏可以找到你正在用-l標誌鏈接的庫。

此外,我會建議使用相對路徑來包括你的包含和庫,而不是絕對的。

+0

謝謝,我試過了;它仍然「找不到-lmpir」。使用「-v」選項進行編譯將產生以下結果:「... #include」...「search here here:[newline] #include <...>搜索從這裏開始:[newline] c:\ mingw \ bin \ ../lib/gcc/mingw32/4.8.1/include [newline] ...「和類似的;這是否表明編譯器沒有離開MinGW目錄?但是,我確實將MPIR路徑添加到PATH環境變量,並且也在包含#included文件的目錄中工作。 – Futurist

+0

嘗試手動在mingw目錄中找到libmpir.a。這就是你的-L標誌需要指向的地方。 – rost0031

+0

沒有。然而,在MPIR目錄中,有各種類似命名的文件,特別是libmpir.la,libmpir.lai,libmpir.dll.a等,它們是mpir-2.7.0目錄中的第一個,其他的在。 lib子目錄。但是,我做了「make check」和「make install」,沒有任何錯誤......我如何檢查安裝是否成功?謝謝。 – Futurist