2010-04-07 50 views
4

我在linux x86上創建了一個共享庫。在創建它時,我在openssl中靜態鏈接。 OpenSSL僅在內部使用,但我看到openssl符號已經導出。這對於需要我的庫和openssl的其他庫會造成問題,因爲可能會在運行時加載錯誤的符號。當我靜態鏈接到共享庫時,是否有辦法阻止所有openssl符號被導出?如何防止從靜態鏈接庫中導出符號?

謝謝, 邁克

回答

0

假設你正在使用gcc,鏈接庫中,設置-fvisibility當=隱藏在你的庫源,標記所有的你想成爲爲外部可見的功能。我認爲只要openssl沒有聲明他們自己的函數extern就可以工作。

我想如果openssl已經聲明瞭一些符號extern,你可以手動強制符號被pragmas隱藏。

還有其他的選擇。檢查fvisibility部分中的gcc文檔,以獲取有關可用內容的完整說明。

+1

你確定這可以嗎?我留下的印象是,可見性僅適用於DSO中的符號(動態共享對象)。目前尚不清楚OP是否將靜態OpenSSL鏈接到動態共享庫中,但我認爲你的策略在這種情況下會起作用。但是,如果OP創建靜態庫,我不認爲可見性屬性適用。儘管如此,發現不同的方式會很好! – 2011-04-11 18:54:57