最近在移植開發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)的前面