我很困惑。我在/ 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)
答案 0 :(得分:4)
选项-lssl
指示链接器查找名为libssl.so
或libssl.a
的文件。如果您拥有libssl.so.4
和libssl.so.6
,则会出现链接器错误。
在库目录的某处找一个名为“libssl.so”的符号链接,可能在/ lib中。
答案 1 :(得分:2)
选项-lssl
查找linker
库名称,在这种情况下它是libssl.so
。通常,libssl.so将是指向soname
库或real
名称库的符号链接,其中实际链接已完成。您应该重命名libssl.so
符号链接以更正使用lib的版本。
有关共享labrary命名的更多信息,请阅读here。