将 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`

我收到了一系列类似于以下的错误:

 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?或者我应该如何最好地解决这个问题?

原文由 mrduclaw 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 922
2 个回答

愚蠢的“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

原文由 mrduclaw 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

如果您对构建和安装的每个库都使用此技巧,则可以将目标目录添加到 LIBRARY_PATH 环境变量并避免使用 -L 选项。

原文由 jopasserat 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题