如果您有確實有經驗與上述標題相關,您是否願意留下您的評論?我試圖做一個共享對象被延遲加載都鏘和GCC在Ubuntu(其實我不介意使用哪個編譯器),但他們並不看起來非常支持任何延遲加載功能(我的預期延遲加載功能將一個存根放在一個父對象中,該對象試圖按需加載另一個對象,此時該功能是必需的,但實際上並沒有)。以下命令顯示,我試圖讓libbar.so被延遲加載到對libfoo.so:Clang/GCC是否真的支持延遲加載功能?
clang bar.c -fPIC -shared -o libbar.so
clang foo.c -Wl,-zlazy,lL'/path/to/where/lib/is',-lbar -o foo
你會看到libfoo.so進入到入口如果libbar.so不前引發異常不存在。反正,我不介意,如果有上面的命令任何錯字,但想知道鏘/ GCC真正支持延遲加載功能,或者不。但是,就個人而言,如果Clang/GCC不支持任何延遲加載功能,我不能相信Linux程序開發人員是否需要調用dlopen()或dlsym()來使共享對象延遲加載。如果對象是用C編寫的,但是如果它是用C++編寫的,情況可能會好起來,但情況必須完全複雜:我相信一個在編譯器或鏈接器的幫助下實現的解決方案是最好的,因爲我已經成功地與Windows和Mac OS做到了。所以我覺得這將是其中的公民都想做夢有一個延遲加載功能,即使是在鐺/ GCC的自然反應。我還可以,如果您有任何評論欣賞我的感覺。
PS。我知道的Solaris支持延遲加載功能,但是這不是很長的路要走我,因爲我將不制定任何事情。
無論如何,非常感謝你提前。
是的,這可以在Linux上完成。 – kec
@ kec,謝謝。你的意思是GCC/Clang可以通過傳遞一些選項來讓共享對象延遲加載嗎?任何官方文檔是否描述瞭如何使用它?很高興知道你能否解釋爲什麼我得到了上述結果。 – Doofah
其實在重讀之後,我不確定我是否知道你在說什麼。你在談論dlopen()嗎?你想要發生什麼? – kec