本文介绍了如何使用AutoTools在64位平台上创建32位共享库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用Autotools构建我的系统,该系统主要由一个库组成。在64位Red Hat平台上,我需要能够生成一个能够在32位Red Hat平台上工作的库。
当我将-m32
添加到编译行时,一切正常,可以生成静电(.a
)库,但只要我尝试创建共享库,就会收到如下错误:
/usr/bin/ld: warning: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crti.o' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-redhat-linux/4.1.2/crtbeginS.o' is incompatible with i386 output
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/crtbeginS.o: In function `__do_global_dtors_aux':
crtstuff.c:(.text+0x29): undefined reference to `__DTOR_END__'
collect2: ld returned 1 exit status'
我可以看到问题是它包含了/usr/lib64中的64位目标文件,而不是/usr/lib中的正确的32位目标文件(它们就在那里),但是我不知道如何修复它。
推荐答案
首先,确保您的编译器/libc支持32位编译。在Ubuntu等一些发行版中,您需要做的是安装软件包gcc-multilib
和/或g++-multilib
:
sudo apt-get install gcc-multilib g++-multilib
然后,在调用Configure时,指定32位主机并传递32位编译标志:
./configure --host=i686-linux-gnu "CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32"
如果您未安装multilib,则在传递-m32
标志时将收到类似configure: error: C compiler cannot create executables
的错误。
这篇关于如何使用AutoTools在64位平台上创建32位共享库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!