2014-01-13 35 views
0

還有一個,所以包含一個cpp。該CPP的包括:爲什麼我不能將ssl lib(-lssl)鏈接到so的makefile中?

include "openssl/evp.h" 

OpenSSL_add_all_digests() 

納米左右,參見符號作爲U:

ùOpenSSL_add_all_digests

因而我檢查如此」生成文件,它不包含LIB:的libssl( - L -lssl)在makefile中,但它可以做得如此成功。

但是當我編寫一個cpp鏈接並測試它時,如果我沒有將libssl與測試cpp鏈接,它將彈出「undefined reference」錯誤。

如何理解?

+0

路徑'openssl/evp.h'可能相對於cpp文件的位置存在,所以你不必在Makefile中聲明它。 – Havenard

+0

@Havenard 3ks,但我想知道如果添加-L -l,而不是-I, – jiafu

回答

1

生成並不需要解析所有符號; 生成可執行文件需要解析所有符號。所以如果你生成一個so,你可以有「未定義的參考」,例如,

testso.cpp:

void funcA(); 

void funcB() 
{ 
    funcA(); 
} 

並編譯和鏈接如下圖所示:

g++ -fPIC -o testso.o -c testso.cpp # COmpile 
g++ testso.o -shared -o libtestso.so # Link 

您可以生成libtestso.so成功。

但是,如果您嘗試將其鏈接到可執行文件,則需要定義funcA()。

+0

但我使用mingw使用您的命令來創建所以,它彈出未定義的符號,有什麼區別? ps:在linux中,使用g ++,這是沒有問題的 – jiafu

+0

@jiafu你的意思是如果你在mingw中使用g ++來編譯testso.cpp並且只生成它,它會彈出「undefined reference」錯誤? – Mine

+0

是的,所以它讓我困惑,所以我問了這個問題。可能是mingw無法提供與centos的gcc相同的行爲。 – jiafu

相關問題