2011-07-05 54 views
2

我正在編寫一個取決於Poco c++ library的軟件。我可以設法在Ubuntu和Windows上編譯庫,但只能靜態編譯。這很好,因爲我想靜態使用它。然而,當我嘗試編譯所依賴的庫程序,我得到類似這樣(自由翻譯)錯誤:將靜態庫鏈接到gnu g ++,沒有這樣的文件或目錄

Poco/RegularExpression.h: No such file or directory. 

然而,當我也明確告訴編譯器到哪裏尋找庫的頭與-I開關文件我碰到下面的錯誤,而不是(但也許20-30類似的路線):

Undefined reference to (pthread_mutex...) 

我已經嘗試了很多不同的組合,無論是直接與G ++,利用makefile文件。 我應該包括庫的頭文件的路徑,或者我不知道如何成功地編譯庫正確? 如果我應該包含路徑,我該如何擺脫「未定義的引用」錯誤?

我很新的C++編程,所以忍受着我。 謝謝,羅伯特

+0

也許嘗試加入'-lpthread'。看起來像在鏈接階段缺少該庫。 –

+0

謝謝!它的工作,編譯一個簡單的測試。但是,這是正確的方式來鏈接和包含標題? – roggan87

+0

不知道你的意思是「正確的方式」,但是,一般來說,你必須指定包含所有標題的包含目錄,如'',並且必須鏈接到所有正在使用的庫(或您正在使用的其他庫正在遞歸使用)。 –

回答

1

這是非常常見的錯誤,我也是,每時每刻忍受它。

  • 您是否將.a添加到您的項目中?
  • 你如何包含標題?與<>或「」?
    • 如果是後者,請確保文件在您的包含文件夾中。
    • 如果第一,確保你已經添加的路徑的文件,或者說,他們位於g ++的全球包括文件夾
  • 是指庫被編譯成的.so/.dll文件?
    • 通常,如果庫的目的是動態的,靜態庫只能指向它。
  • 您是否包含了Poco本身所需的依賴關係?像-lpthread一樣,我認爲你錯過了。
+0

「.a」和「as .so/.dll」有點俚語;有點像當你說「我需要新的橋石」或「我失去了我的甜心」時。我會建議靜態庫或只是圖書館;) –

+0

我需要記住這一點,謝謝:) – inestical

+0

謝謝,這真的讓我走了:) – roggan87

0

試試-I選項。在具有RegularExpression.h作爲扶養對象,嘗試包括包含像這樣上面的頭文件的目錄:

g++ -I/home/.../Poco <other options>

相關問題