将 OpenSSL 库链接到程序
- 2024-10-11 08:36:00
- admin 原创
- 70
问题描述:
我已经从源代码构建了 OpenSSL(故意设计的旧版本;使用构建的./config && make && make test
),并且更愿意使用我已构建的内容,而不必make install
链接到我的程序。
失败的命令是:
gcc -Wall -Wextra -Werror -static -Lopenssl/openssl-0.9.8k/ -lssl -lcrypto
-Iopenssl/openssl-0.9.8k/include -o myApp source1.o source2.o common.o`
我收到一系列类似以下内容的错误:
common.c:(.text+0x1ea): undefined reference to `SSL_write'
这让我觉得我的 OpenSSL 出了点问题。如果我-Lopenssl/openssl-0.9.8k/
从命令中省略,错误将变为无法:
/usr/bin/ld: cannot find -lssl
/usr/bin/ld: cannot find -lcrypto
我是否错误地编译了 OpenSSL?或者我应该如何最好地解决这个问题?
解决方案 1:
愚蠢的“Linux 主义”又来了!显然,我需要更改命令,使-L
and-l
内容位于末尾,例如(尽管似乎man gcc
表明):
gcc -Wall -Wextra -Werror -static -o myApp source1.o source2.o common.o -Lopenssl/openssl-0.9.8k/ -lssl -lcrypto -Iopenssl/openssl-0.9.8k/include
解决方案 2:
为什么你不想使用make install
?它可以将生成的二进制文件复制到你想要的目录中,如果你之前将它传递给./configure --prefix $HOME/target_library_install_directory
如果您对构建和安装的每个库都使用此技巧,则可以将目标目录添加到LIBRARY_PATH
环境变量中,并避免使用 -L 选项。
解决方案 3:
如果您使用 Autotools,或者您正在构建 Autotools 项目(例如cURL
),那么您应该能够使用pkg-config
。这个想法是 Autotools 包将读取 OpenSSL 的包配置,然后一切将“为您工作”。
OpenSSL 包配置库名称是openssl
。
您可以在基于 makefile 的项目中像这样使用它。
%.o: %.c
$(CC) -o $@ -c `pkg-config --cflags openssl` $^
target: foo.o bar.o baz.o
$(CC) -o $@ `pkg-config --libs openssl` $^
另请参阅如何在 Make 中使用 pkg-config和如何使用 pkg-config 静态链接库。
解决方案 4:
另一种方法是使用来保持兼容性。这是需要链接pkg-config
的一个例子。makefile
`OpenSSL`
CC = gcc
CFLAGS = \n -I. \n -D_GNU_SOURCE=1
LDFLAGS = `pkg-config --libs inih`
LDFLAGS += `pkg-config --libs libcurl`
LDFLAGS += `pkg-config --libs liburiparser`
LDFLAGS += `pkg-config --libs openssl`
# Executable
foo: foo.o
$(CC) -o $@ $^ $(LDFLAGS)
foo.o: foo.c
$(CC) -c $(CFLAGS) $< -o $@
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件