如何使用AutoTools在64位平台上创建32位共享库 [英] How to create a 32-bit shared-library on a 64-bit platform with autotools

查看:23
本文介绍了如何使用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位共享库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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