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

发布于 2024-11-04 08:44:56 字数 319 浏览 0 评论 0原文

我很困惑。我在 /lib 中有 2 个版本的 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)

I'm puzzled. I have 2 versions of libssl.so in /lib:
/lib/libssl.so.4 and /lib/libssl.so.6

Here is a stripped down minimal example -- I'm linking "nothing" with libssl -- the result being that it links to libssl.so.4. What determines this?

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

花落人断肠 2024-11-11 08:44:56

选项-lssl指示链接器查找名为libssl.solibssl.a的文件。如果您拥有的只是 libssl.so.4libssl.so.6,那么您将遇到链接器错误。

在库目录中的某个位置(可能在 /lib 中)查找名为“libssl.so”的符号链接。

The option -lssl instructs the linker to look for the file named libssl.so or libssl.a. If all you have are libssl.so.4 and libssl.so.6, then you would have a linker error.

Look for a symlink called "libssl.so" somewhere in your library directories, likely in /lib.

屋檐 2024-11-11 08:44:56

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

有关共享实验室命名的更多信息,您可以在此处阅读。

Option -lssl looks for linker library name, in that case it is libssl.so. Typically libssl.so would be a symlink pointing to soname library or real name library whith which actual linking is done. You should repoint libssl.so symlink to correct version of using lib.

More about shared labrary naming you can read here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文