curl-7.82静态库依赖openssl-1.1.q静态库出现的问题

说明

使用到相应静态库,需要编译,记录下来,方便自己翻阅,也期望帮助到有需要的人。

构建Makefile

#编译curl-7.82
./configure --disable-manual CFLAGS="-fPIC" --prefix=/dev_tools/usr/local/curl-7.82 --with-openssl=/dev_tools/usr/local/openssl-1.1.q --with-zlib=/dev_tools/usr/local/zlib 

# 其他编译见 https://editor.csdn.net/md/?articleId=135241692

目的

编译一个动态库libluacurl.so,导出函数。

遇到问题

1.正确的库链接顺序 -llua -lcurl -lssl -lcrypto -lz -ldl -pthread;使用其他顺序则dlopen函数调用失败,返回0x0
2.libcurl编译成静态库:
<1> 从libluacurl.so 导出的函数,在测试main.cpp中可以正常。但从正式的程序中,总是内存泄漏
通过debug cordump文件显示 0x00007f93973e57a0 in lh_insert () from /lib64/libcrypto.so.10。这说明没有加载指定的-lssl -lcrypto静态库,而是加载系统自带的动态库。

解决办法:

1.libcurl编译成动态库。
2.配置export LD_LIBRARY_PATH=/appliance/libs/plus/extmodule:$LD_LIBRARY_PATH:/usr/local/lib/
/appliance/libs/plus/extmodule 存放libcurl的地方。指定了优先加载的,配置前,配置后,可以通过ldd libluacurl.so查看比较得出。

可能原因:

libssl libcrypto这两个库的问题,libcurl依赖他们,但最终ld链接的时,程序加载到系统环境下的libssl libcrypto,并未加载指定的静态libssl libcrypto。

如有在makefile 中导致的问题,请给我留言,谢谢!

makefile

USER_HOME=${HOME}
ROOT_HOME=$(shell dirname $(shell readlink -f pwd))
ROOT_NAME=$(shell dirname $(shell readlink -f pwd) | awk -F '/' '{ print $$NF }')

OBJS_PATH=$(USER_HOME)/usrlibs/objs/$(ROOT_NAME)
LIBS_PATH=$(USER_HOME)/usrlibs/libs
BINS_PATH=$(ROOT_HOME)/bin
SRCS_PATH=$(ROOT_HOME)/src

LUA5_LIB_PATH=-L/dev_tools/lua-5.3.5/src
CURL_LIB_PATH=-L/dev_tools/usr/local/curl-7.82/lib

SSLX_LIB_PATH=-L/dev_tools/usr/local/openssl-1.1.q/lib
ZLIB_LIB_PATH=-L/dev_tools/usr/local/zlib/lib

INPUT_LIBS_PATH= $(LUA5_LIB_PATH) $(CURL_LIB_PATH) $(SSLX_LIB_PATH) $(ZLIB_LIB_PATH)
INPUT_LIBS_NAME= -llua -lcurl -lssl -lcrypto -lz -ldl -pthread
#INPUT_LIBS_NAME= -llua -lcurl -lz -lssl -lcrypto -ldl -lcurl -lpthread


$(shell if [ ! -d $(OBJS_PATH) ]; then mkdir -p $(OBJS_PATH); fi)
$(shell if [ ! -d $(LIBS_PATH) ]; then mkdir -p $(LIBS_PATH); fi)

PLUS_PATH=$(shell dirname $(shell dirname $(shell readlink -f pwd)))
CC      = g++ -g -Wall -D_THREAD_SAFE -DMY_MULTITHREAD


PLUS_INCLUDE = -I$(PLUS_PATH)/libcomm/src
CURL_INCLUDE = -I/dev_tools/usr/local/curl-7.82/include
LUA5_INCLUDE = -I/dev_tools/lua-5.3.5/src
PATH_INCLUDE = $(CURL_INCLUDE) $(LUA5_INCLUDE)



SRCS= $(foreach x,$(SRCS_PATH),$(wildcard $(addprefix $(x)/*,.cpp .S)))
SRCC= $(foreach x,$(SRCS_PATH),$(wildcard $(addprefix $(x)/*,.c .S)))
OBJX = $(addprefix $(OBJS_PATH)/, $(addsuffix .o,$(notdir $(basename $(SRCS)))))
OBJS = $(OBJX) $(addprefix $(OBJS_PATH)/, $(addsuffix .o,$(notdir $(basename $(SRCC)))))


TARGET_SO=$(BINS_PATH)/libluacurl.so
TARGET_A=$(LIBS_PATH)/libluacurl.a

TARGET=$(TARGET_SO) $(TARGET_A)

all: $(TARGET)

install: $(TARGET)
        @cp -f *.h ../include/

$(TARGET): $(OBJS) makefile
        $(CC) -g -shared -o $(TARGET_SO) $(OBJS) $(INPUT_LIBS_PATH) $(INPUT_LIBS_NAME)
        ar -rs $(TARGET_A) $(OBJS)
clean:
        @rm -f $(OBJS_PATH)/*.o
        @rm -f $(TARGET_SO)
        @rm -f $(TARGET_A)
$(OBJS_PATH)/%.o:$(SRCS_PATH)/%.cpp
        $(CC) -fPIC $(PATH_INCLUDE) $  -c $< -o $@
$(OBJS_PATH)/%.o:$(SRCS_PATH)/%.c
        $(CC) -fPIC $(PATH_INCLUDE) $  -c $< -o $@
  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值