【发布时间】:2011-06-08 19:13:42
【问题描述】:
假设我有:
-
/usr/lib/libsomething.so.1在机器 A 上; -
/usr/lib/libsomething.so.2在机器 B 上。
两台机器都有/usr/lib/libsomething.so 符号链接到它们各自的库。
如果我使用gcc 与-lsomething(甚至/usr/lib/libsomething.so)链接,它将遵循符号链接,并且机器A 上的ldd 会产生类似的内容:
libsomething.so.1 => /usr/lib/libsomething.so.1
这意味着它将无法在机器 B 上找到库。
现在我知道这些是主要的版本号更改,并且我知道它们可能不兼容,但我愿意承担这个风险。我想告诉链接器的是寻找libsomething.so,不要跟随符号链接,所以ldd会显示
libsomething.so => /usr/lib/libsomething.so.1
在 A 但是
libsomething.so => /usr/lib/libsomething.so.2
在 B 上。然后加载程序将跟随符号链接到那里的任何版本。
另外,我不希望延迟加载 dlopen 或任何东西。我希望它在编译时链接到共享对象。
这可能吗?
【问题讨论】:
标签: gcc linker ld shared-objects