2013-08-28 29 views
0

讓我解釋一下我的問題:我編寫了一個使用OpenCV libopencv_core.so的共享庫libMyLib.so。用NetBeans隱藏Linux上的共享庫中的二級依賴關係

當我編寫使用我的庫的應用程序時(libMyLib.so)我想隱藏OpenCV庫的使用(即隱式鏈接),但我無法使用。我也必須明確鏈接到libopencv_core.so。

我該怎麼辦?是否有可能或者我必須靜態鏈接OpenCV到我自己的庫來隱藏它?

我正在使用NetBeans 7.3.1和gcc 4.7.3和ld 2.23.2。

感謝您的幫助!

回答

0

應該可以靜態鏈接OpenCV庫。我不認爲在加載共享庫的過程中可以完全隱藏OpenCV庫符號。下列選項ld應該工作:

ld ... -static -lopencv_core -Bdynamic ... 

如果從cc調用,則是這樣的:

gcc ... -Wl,-static,-lopencv_core,-Bdynamic ... 

另一種可能性是使用)使用dlopen庫(動態加載和使用dlsym找到符號()。這可能會隱藏庫的其他符號。以下是這些網頁的聯機版本:http://linux.die.net/man/3/dlopen

+0

嗯,我認爲我的問題的解決方案是通過靜態鏈接到libopencv_core.a等完全封裝OpenCV。這不是一個問題,但我仍然好奇:我的lib.so仍然需要系統libs.so當然,我不必明確地鏈接到他們...... ;-) –

+0

這是真的。你想隱藏那些符號嗎? – ash

+0

是的!其實我想隱藏OpenCV的存在。我不知道程序員在使用我的lib時必須知道OpenCV。在閱讀你的答案並思考一下之後,我相信我會將OpenCV重建爲靜態的並且像這些庫一樣。 –