2011-10-09 89 views
0

我編譯了Google C++ Test。我現在試圖將它添加到我的g ++安裝(在Cygwin上),因此我不必爲每個項目指定-I,-L-l。我做的步驟是:G ++:嘗試將include和lib添加到默認目錄

  1. 我把一個符號鏈接到/ usr /本地/包括以GTEST_ROOT /包括/ GTEST
  2. 我把在/ usr/local/lib目錄中GTEST_ROOT/lib中的庫符號鏈接( libgtest.la libgtest_main.la)
  3. 我寫了一個證明程序測試設置

測試程序編譯罰款與g++ -c proof.cppg++ proof.cpp在鏈接過程中給出了錯誤,說GTEST引用不能被發現。

使用grep來搜索我GTEST_ROOT爲所需的參照,我發現他們在GTEST_ROOT/lib中/的.libs附加庫(libgtest.a libgtest.la libgtest.lai libgtest_main.a libgtest_main.la libgtest_main.lai)

由於時間的限制,我使用下面的命令g++ -LGTEST_ROOT/lib/.libs -lgtest proof.cpp來使它工作,我把它放在makefile中。

但是,我仍然試圖讓我的設置,使g++ proof.cpp只是工作。我錯過了什麼?

感謝馬特,我現在明白我不能放棄-lgtest。我想至少擺脫-LGTEST_ROOT/lib/.libs。我已將符號鏈接添加到提供的其他.a.lai文件中。但是,g++ proof.cpp -lgtest現在給我鏈接器錯誤:cannot find -lgtest

注意:symlinking GTEST_ROOT/lib/.libs中的庫仍然不會給出所需的結果。

回答

0

您總是需要將-lgtest傳遞給您的最終編譯/鏈接步驟。 GCC不會在其搜索路徑中搜索所有缺失的符號(這將會太昂貴)。

庫文件本身(.so.a)需要位於/usr/local/lib/目錄中,或者指向這些文件的符號鏈接。 Symlinking目錄不起作用。

好吧,這在技術上並非如此。你可以修改你的spec文件,但不要那樣做。

+0

謝謝,馬特。我有'libgtest.la'和'libgtest_main.la'(不是目錄)的符號鏈接。根據你的建議,我已經在'.a'和'.lai'文件中添加了符號鏈接(沒有'.so'文件)。所以我期望'g ++ proof.cpp -lgtest'可以工作,但是我得到'找不到-lgtest'錯誤。有什麼建議麼? – Carlos

+1

嘗試刪除所有的符號鏈接,除了'.a'。 BTW不會gtest有'make install'目標?你不應該親自做這些事情,make過程應該處理安裝部分(並且修復'.la'文件進行安裝)。 – Mat

+0

再次感謝,馬特。刪除除'.a'文件以外的所有內容時不會發生變化。 gtest的'make install'有用地告訴你閱讀README,它沒有關於如何處理這個庫的指令。 – Carlos

0

如果你想對它作出反應,那你總是需要指定這個參數 - 這就是Makefile的用途 - 所以你不需要在每次編譯時輸入那些長行。如果你願意,你也可以使用LDFLAGS環境變量來爲你存儲這些變量,但是你會將它鏈接到你編譯的每個可執行文件 - 這絕對不是一個好主意。