将OpenSSL库链接到程序
我已经从源代码(一个故意旧版本;用./config && make && make test
构建)构建OpenSSL,并且宁愿使用我已经构建而没有执行make install
来链接我的程序。将OpenSSL库链接到程序
多数民众赞成失败的命令是:
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的错误?或者我该如何最好地解决这个问题?
愚蠢的“Linux主义”罢工了!很显然,我需要改变我的命令使得-L
和-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
为什么你不希望使用make install
?它可以在你想要的目录复制生成的二进制文件,如果你以前它传递给./configure --prefix $HOME/target_library_install_directory
如果你使用这种伎俩与每个库构建和安装,那么你可以加入目标目录到LIBRARY_PATH
环境变量,避免使用 - L选项。
如果您使用Autotools,或者您正在构建一个像cURL
这样的Autools项目,那么您应该可以使用pkg-config
。这个想法是Autotools软件包将读取OpenSSL的软件包配置,并且事情将“为您工作”。
OpenSSL程序包配置库名称为openssl
。
您可以在基于makefile的项目中使用它。
%.o: %.c
$(CC) -o [email protected] -c `pkg-config --cflags openssl` $^
target: foo.o bar.o baz.o
$(CC) -o [email protected] `pkg-config --libs openssl` $^
另见How to use pkg-config in Make和How to use pkg-config to link a library statically。
这是`-lssl -lcrypto`,需要在最后。当链接器扫描库时,只链接已经存在未定义引用的函数。所以你需要把“消费”对象放在链接行的开始处,并在末尾放置“提供”对象。 – caf 2010-12-06 01:35:40
我总是很奇怪接受我自己的答案。我现在会切换它。 – mrduclaw 2014-03-29 15:10:50
它对llvm族有什么不同? – saruftw 2017-06-13 19:05:26