2010-01-28 41 views
2

我一直在通過asio ssl示例工作(鏈接如下)。儘管我盡了最大的努力,但我一直無法將openssl鏈接到boost示例中。 ld的輸出是ld缺少來自libssl.a的符號。我無法弄清楚的是,我發現了libssl.a中的所有符號,其中ld表示缺少nm。我懷疑我正在做一些愚蠢的事情,但我對C++不夠熟悉,無法修復它。我還包括我的makefile。 ssl-client.cpp的來源是從鏈接逐字。援助建設助推asio ssl示例

http://www.boost.org/doc/libs/1_41_0/doc/html/boost_asio/example/ssl/client.cpp

INCLUDES = -I /usr/local/boost_1_41_0/ -I /opt/local/include/ 
LIBS = -L/usr/local/boost_1_41_0/lib/libboost_system.a \ 
-L/opt/local/lib/libcrypto.a \ 
-L/opt/local/lib/libssl.a 

CPP = g++ 

build: ssl-client 

ssl-client: ssl-client.cpp 
    $(CPP) $(LIBS) $(INCLUDES) ssl-client.cpp 
+0

通過縮進它的格式代碼4個空格(我已經爲你做了)。這是真的你的Makefile,逐字?我注意到你正在定義變量'LIBS',然後使用變量'LIB'(沒有S)。 –

+0

LIBS - > LIB從我搞亂的時候開始只是一個小小的錯字。對困惑感到抱歉。我沒想到它會格式化makefile,所以我沒有嘗試。謝謝你的提示! –

+0

'CPP = g ++'看起來不太正確。 C++編譯器是'CXX',而不是'CPP'。 'CPP'是C預處理器。 – jww

回答

4

我想你誤會了-L選項是如何工作的。 -L指定搜索庫的路徑。要指定單個庫鏈接,使用-l選項並省略「LIB」前綴,如下所示:

LIBS = -L/usr/local/boost_1_41_0/lib -L/opt/local/lib \ 
    -lboost_system -lcrypto -lssl 

而且,通常有間-I包括路徑選擇以及實際軌跡沒有空間。我不知道如果有一個空間引起的問題,但你可以試試這個是在安全方面:

INCLUDES = -I/usr/local/boost_1_41_0/ -I/opt/local/include/ 

而且,在我的評論指出,你所定義的變量LIBS但當時使用的LIB變量。對g ++的調用應該如下:

$(CPP) $(LIBS) $(INCLUDES) ssl-client.cpp 
+0

非常感謝。我知道這很簡單。現在我距離不是C++ newb更近了一步。 –