为什么gcc链接器选择旧版本的共享库?

时间:2011-04-28 15:23:27

标签: c++ linker

我很困惑。我在/ lib中有两个版本的libssl.so: /lib/libssl.so.4/lib/libssl.so.6

这是一个精简的最小例子 - 我将“无”与libssl相关联 - 结果是它链接到libssl.so.4。是什么决定了这个?

 $ g++ -o foo.so -shared -lssl

 $ ldd foo.so |grep ssl
 libssl.so.4 => /lib/libssl.so.4 (0xf7f04000)

2 个答案:

答案 0 :(得分:4)

选项-lssl指示链接器查找名为libssl.solibssl.a的文件。如果您拥有libssl.so.4libssl.so.6,则会出现链接器错误。

在库目录的某处找一个名为“libssl.so”的符号链接,可能在/ lib中。

答案 1 :(得分:2)

选项-lssl查找linker库名称,在这种情况下它是libssl.so。通常,libssl.so将是指向soname库或real名称库的符号链接,其中实际链接已完成。您应该重命名libssl.so符号链接以更正使用lib的版本。

有关共享labrary命名的更多信息,请阅读here