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