undefined reference to錯誤

最近在移植開發openssl庫時,編譯本身的動態庫遇到undefined reference to錯誤,在此記錄一下ui

從openssl官網移植openssl庫,獲得libssl.a和libcrypto.a兩個靜態庫,以及openssl的頭文件blog

我在openssl庫的基礎上封裝了本身的代碼,而後生成libmyopenssl.a靜態庫,文件分佈以下接口

 

在另外的應用中又須要用到本身封裝的接口,即須要用到libmyopenssl.a庫ssl

開始寫的Makefile是這樣的開發

#external librariesopenssl

 LIBS += -L ../openssl/_build -lmyopenssl編譯

只包含了本身編譯的靜態庫文件myopenssl基礎

這樣會致使undefined reference to錯誤file

而後修改以下:im

 LIBS += -L ../openssl/lib/ -lssl -lcrypto -L ../openssl/_build -lmyopenssl

這樣編譯還出現undefined reference to錯誤

緣由是myopenssl靜態庫依賴ssl和crypto靜態庫,須要把被依賴的庫ssl和crypto放在後面,修改以下:

 LIBS += -L ../openssl/_build -lmyopenssl -L ../openssl/lib/ -lssl -lcrypto 

這樣編譯經過。

因此總結以下:

編譯時當連接的庫文件(myopenssl)中又使用了另外別的庫文件時(ssl和crypto),須要把另外的庫(ssl和crypto)也連接進來,而且連接時有順序,順序是依賴其餘庫的庫(myopenssl)必定要放到被依賴庫(ssl和crypto)的前面