【发布时间】:2019-10-02 12:40:29
【问题描述】:
我正在构建一个动态库,libfoo.so,它依赖于libcrypto.so。
在我的 autotools Makefile.am 文件中,我有这样一行:
libfoo_la_LIBADD += -L${OPENSSL_DIR}/lib -lcrypto
其中$OPENSSL_DIR 默认为/usr,但可以通过传递--with-openssl-dir=/whatever 来覆盖。
如何确保使用libfoo.so 的可执行文件使用${OPENSSL_DIR}/lib/libcrypto.so(仅限)构建或运行可执行文件的人必须使用rpath 或摆弄LD_LIBRARY_PATH?
就目前而言,我可以构建 libfoo 并通过 --with-openssl-dir=/usr/local/openssl-special 并且它构建得很好。但是当我运行ldd libfoo.so 时,它只是指向/usr/lib 中的libcrypto.so。
我能想到的唯一解决方案是将libcrypto.a 静态链接到libfoo.so。有没有其他可能的方法?
【问题讨论】:
-
我不确定我是否理解。你已经排除了最有可能的可能性。除了“读懂我的想法”之外,您如何描述可接受的解决方案?
-
此外,动态链接/加载细节因平台而异。您对哪个特定平台感兴趣?
-
@JohnBollinger 我可以接受“嗯……那是不可能的”的回答。我对主题领域不够熟悉,不知道我是否遗漏了其他东西。 W.r.t.平台,有问题的项目目前建立在 Linux 和 MacOS 上,所以一些可移植性会很好。我将把它添加到问题中。
标签: c shared-libraries static-linking autotools dynamic-linking