我有使用鐺++ 3.2即建立一些庫的Ubuntu 12.04下開發一個C++源樹,然後編譯與這些庫和其他各種系統庫的通常收集一些應用。兩個謎題。客戶端報告代碼無法使用clock_gettime()的未定義引用進行構建。果然,我沒有在構建邏輯(scons)中包含義務性的「-lrt」。人咬狗:符號解析*無*鏈接庫? clock_gettime()-lrt
第一個難題:即使我沒有在任何地方指定「-lrt」,這個編譯,鏈接和正確執行並且沒有抱怨我的系統!這個符號如何正確解決?我懷疑這是因爲應用程序鏈接到一個本身需要librt的動態庫,但我不明白爲什麼會發生這種情況。
二字謎:假設clock_gettime()獲取如何不「-lrt」,爲什麼會出現這種情況我的系統上解決了滿意的解釋,但不是在客戶端非常類似的設置?
「......一個謎,包裹在一個謎,一個謎內」 ---丘吉爾
建議工具揭示了什麼是真的在這裏將是非常歡迎。
這也許是特定版本/叉/在一個系統上GCC的分支,是挑剔有關鏈接反對甚至是標準庫函數庫1337用戶。恕我直言,編譯器的正常/可接受行爲是在C標準庫中使用頭文件和函數時自動提供需要鏈接的所有庫。如果編譯器不這樣做,這是廢話。 – 2012-10-16 05:52:49
@ H2CO3:這聽起來像'#pragma lib'解決方案,我認爲它仍然是MSVC獨有的。順便說一下'clock_gettime'不是一個標準的C函數。 – MSalters