如何在64位/32位混合系统中使用共享库? [英] How do shared libraries work in a mixed 64bit/32bit system?
本文介绍了如何在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屋!
查看全文