2012-10-23 132 views
0

我在Mac上收到一箇舊代碼,並試圖在OS X 10.6上編譯它,在代碼中很少調用OpenSSL庫(如SSL_write()),我添加了頭文件(#包括)該等文件和檢查我的OpenSSL版本的顯示我「0.9.8r」(我知道蘋果有它這個庫加密自己的框架),但爲什麼我得到的鏈接錯誤,因爲這:Mac OS X 10.6:OpenSSL庫

sockets::TcpSocket::TryWrite(char const*, unsigned long) in TcpSocket.o 

我知道代碼應該編譯在/usr/lib這個庫,但它不,我在Xcode中缺少路徑或其他設置?

+0

'sockets :: TcpSocket :: TryWrite'不是OpenSSL。 – jww

回答

1

/usr/bin中沒有庫。我假設你的意思是/ usr/lib。但是,您通常不會針對/ usr/lib進行編譯。您通常會針對特定SDK進行編譯,該SDK具有自己的/ usr/lib和/ usr/include副本。您使用的SDK頭文件通常在-isysroot參數中傳遞。如果您在Xcode中構建,這些設置主要通過「基本SDK」和「OS X部署目標」進行設置。沒有關於你如何構建的更多細節,我不確定在哪裏指出你。特別是,相關文件的編譯和鏈接行是什麼樣的?


在Xcode中,不要試圖通過路徑與特定系統庫鏈接。您應該始終使用構建設置的「鏈接階段」面板鏈接系統庫,然後從SDK庫列表中進行選擇。在鏈接階段面板中選擇特定路徑幾乎總是會導致問題。

+0

謝謝你的回覆。對不起,我的意思是usr/lib。關於那個我猜測它會是openssl的缺失庫,我將它與SDK/MacOSX10.6/usr/lib/libssl.0.9.8.dylib關聯起來,它會給我一些其他的鏈接錯誤,例如:「vtable for插座::異常」,從引用:在EventHandler.o 插座::異常::〜異常() 「: __static_initialization_and_destruction_0(INT,INT)中的TCPSocket插座:: SSLInitializer :: SSLInitializer()」,從參考.o 「_ERR_error_string」,引用來自: TcpSocket.o中的套接字:: TcpSocket :: TryWrite(char const *,unsigned long) – Cam