2016-03-02 87 views
1

gcc上是否有任何編譯選項可用於防止在運行時發現符號查找錯誤(並避免在運行時通過生成編譯錯誤來發現它)?C++動態鏈接:符號查找錯誤的gcc選項

其實,我在執行一個未定義的符號:

/path/to/lib/lib.so: undefined symbol _ZNsymbol_name_ 

能的gcc防止在編譯此問題的用戶?

+2

你能解釋一下你想要做的更多的細節,或許有一個例子嗎?如果沒有例子,至少在遇到這個問題時會出現什麼情況。 –

+0

@MatsPetersson我剛剛編輯我的問題,以顯示我想避免的問題。 – FlashMcQueen

+0

您是否已將「/path/to/lib/lib.so」添加到環境變量LD_LIBRARY_PATH中?如果是的話,它是否與您在構建(編譯)時使用的lib.so相同,或者在另一個地方使用了相同的名稱? – Elan

回答

1

GCC將在編譯時防止出現此錯誤,前提是已爲其提供了相關庫鏈接。

如果您有不同的共享庫,可能是安裝的舊版本,那麼即使編譯成功,您也可能會遇到此錯誤。

在鏈接過程中,您可以使用ld -z now來確保所有符號都會事先解決。或者您可以使用export LD_BIND_NOW=1來設置環境,以確保在程序運行之前解決所有符號。

類似的問題被回覆了我here和在有用的教程我發現here