如何在64位/32位混合系统中使用共享库? [英] How do shared libraries work in a mixed 64bit/32bit system?

查看:28
本文介绍了如何在64位/32位混合系统中使用共享库?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

早上好,

在64位RedHat机器上,我们必须编译并运行32位应用程序。同时,我设法编译了所需的GCC版本(4.0.3)和所有所需的32位运行时库,并将LD_LIBRARY_PATH设置为指向32位版本,但是现在在剩余的构建过程中,需要执行一个小Java程序,该程序作为64位程序安装在/usr/bin中,它现在首先找到32位版本的libgccs.so。

通常,如果将LD_LIBRARY_PATH设置为32位版本,则会中断64位程序,反之亦然。

这到底是怎么回事?我确信我不是第一个手头有这个问题的人。通常怎么解决?

问候您, 斯特凡

推荐答案

将32位和64位目录添加到LD_LIBRARY_PATH。

如果执行此操作,则32位或64位的ld.so将使用正确的库。

例如32位测试APP test32和64位测试app test,在本地安装了GCC(更新版本)的副本,并在用户home目录下安装了binutils,避免破坏GCC的全系统安装:

=> export LD_LIBRARY_PATH=/home/user1/pub/gcc+binutils/lib:/home/user1/pub/gcc+binutils/lib64

=> ldd ./test32
    libstdc++.so.6 => /home/user1/pub/gcc+binutils/lib/libstdc++.so.6 (0x00111000)
    libgcc_s.so.1 => /home/user1/pub/gcc+binutils/lib/libgcc_s.so.1 (0x00221000)

=> ldd ./test
    libstdc++.so.6 => /home/user1/pub/gcc+binutils/lib64/libstdc++.so.6 (0x00007ffff7cfc000)
    libgcc_s.so.1 => /home/user1/pub/gcc+binutils/lib64/libgcc_s.so.1 (0x00007ffff7ad2000)

(删除了不太有趣的库路径)

这表明加载程序知道忽略错误体系结构的库,至少在Science Linux6.3(RHEL派生的)系统上是这样。我希望其他发行版也能类似地工作,但还没有测试过这一点。

但是,这可能只是比您的(未指定)发行版版本更晚才开始出现的情况。

这篇关于如何在64位/32位混合系统中使用共享库?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆