链接与Soname共享图书馆



如何强制GCC链接到系统上共享库的给定版本(SONAME)的链接?

我需要这样做来强制执行#include'ED版本的版本,即使安装了多个版本的OpenSSL,也可以在任何系统上链接的版本匹配。要查找ABI版本,我的配置脚本首先编译并运行一个从标题中提取SONAME的程序:

#include <openssl/opensslv.h>
#include <stdio.h>
int main () {
  printf(SHLIB_VERSION_NUMBER);
  return 0;
}

SHLIB_VERSION_NUMBER包含so版本字符串,例如0.9.81.0.2k1.1.0。但是,如何告诉gcc与此版本的libssllibcrypto链接,而不仅仅是任何-lssl

我尝试了"原位"链接,因此我们使用的不是与gcc main.c -lcrypto链接:

gcc main.c libcrypto.so.1.1.0

但是,似乎找不到链接器libcrypto.so.1.1.0

gcc: error: libcrypto.so.1.1.0: No such file or directory

我猜该系统仅在使用-l标志时在标准位置搜索。有没有更好的方法来使我的软件链接针对libcrypto.so.1.1.0

选择openssl共享库的正确版本使用:

gcc main.c -l:libssl.so.1.0.0 -l:libcrypto.so.1.0.0

回答此问题的关键是"我如何控制LD,以便链接共享库的正确版本?"。

使用GNU编译器(GCC,G ,GDC等)传递链接器标志(命令行参数到LD)的正确方法是使用带有" -l"的正常LD参数。例如-lssl或-l/usr/local/lib。

编辑:根据如何指定要在链接时间使用的库版本?您可以使用以下内容阅读LD的手册:man ld

最新更新