将OpenSSL库链接到程序

mrd*_*law 16 linux gcc openssl

我已经从源代码构建了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`
Run Code Online (Sandbox Code Playgroud)

我收到一系列类似的错误:

common.c:(.text+0x1ea): undefined reference to `SSL_write'
Run Code Online (Sandbox Code Playgroud)

这让我觉得我的OpenSSL有点时髦.如果我-Lopenssl/openssl-0.9.8k/从命令中省略,则错误将更改为无法:

/usr/bin/ld: cannot find -lssl
/usr/bin/ld: cannot find -lcrypto
Run Code Online (Sandbox Code Playgroud)

我是否错误地编译了OpenSSL?或者我该如何最好地解决这个问题?

mrd*_*law 27

愚蠢的"Linux-isms"再次罢工!很显然,我需要改变我的命令,使得在-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

  • 这是`-lssl -lcrypto`需要在最后.链接器扫描库时,只链接已定义未定义引用的函数.因此,您需要将"消耗"对象放在链接行的开头,并在末尾放置"提供"对象. (18认同)
  • 我总是很奇怪接受我自己的答案。不过我现在就换。 (2认同)

jop*_*rat 5

你为什么不想用make install?如果您之前将生成的二进制文件传递给它,它可以在您想要的目录中复制它./configure --prefix $HOME/target_library_install_directory

如果使用这一招用每次编译和安装库,你可以再加入目标目录的LIBRARY_PATH环境变量,并避免使用-l选项.