为 i386 构建 crti.o

发布于 2024-07-14 03:16:18 字数 303 浏览 8 评论 0原文

我正在尝试构建一个交叉编译器,其中 x86_64 为主机,i386 为目标。 我收到(所有常见的)crti.o: No such file 错误。 我该如何从 glibc(或可能是 gcc)源显式构建这些文件,而不是从发行版中获取已经构建的 crti.o 和 crtn.o ?

仅供参考,我很清楚 x86_64 编译器的 -m32 选项。 我更喜欢只有 32 位的编译器环境。 另外,我不想使用任何已经构建的 i386 编译器的原因是因为我计划根据我的测试需求混合和匹配 glibc/binutils/gcc 版本。

谢谢, 陈兹

I am trying to build a cross-compiler with x86_64 being the host and i386 being the target. I'm getting the (all to common) crti.o: No such file error. Instead of grabbing an already built crti.o and crtn.o from a distro... how might I go about building these files explicitly from glibc (or possibly gcc) sources?

FYI, I am well aware of the -m32 option for x86_64 compilers. I'd prefer to just have a 32bit-only compiler environment. Also, the reason I don't want to use any of the gazillion already build i386 compilers is because I plan on mixing and matching glibc/binutils/gcc versions depending on my testing needs.

Thanks,
Chenz

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

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

发布评论

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

评论(2

梦毁影碎の 2024-07-21 03:16:18

这是一种可能性(来自此处< /a>)

您需要安装发行版的 32
位 libc-dev 包,或者你需要
--disable-multilib 这将导致编译器不支持 32
位模式。

Here's one possibility (from here)

You need to install your distro's 32
bit libc-dev package, or you need to
--disable-multilib which will result in a compiler that doesn't support 32
bit mode.

岛歌少女 2024-07-21 03:16:18

您确定正确配置了交叉编译吗? 应该是

CBUILD = CHOST = x86_64-pc-linux-gnu
CTARGET = i386-pc-linux-gnu

当您在 x86_64 上运行构建时,编译器才能在 x86_64 上运行,从而为 i386 生成代码。

如果您使用了 CHOST = i386-pc-linux-gnu,您将尝试生成 32 位二进制文​​件,这需要与 32 位 libc 链接。 如果您已经有 32 位 libc,那很好,但听起来您没有。

IE

$ tar xvjf gcc-*.tar.bz2
$ cd gcc-*/
$ mkdir build
$ cd build
$ ../configure --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --target=i386-pc-linux-gnu

Are you sure you're using configuring the cross-compile correctly? It should be

CBUILD = CHOST = x86_64-pc-linux-gnu
CTARGET = i386-pc-linux-gnu

as you're running a build on an x86_64, for a compiler to run on an x86_64, which generates code for an i386.

If you used CHOST = i386-pc-linux-gnu, you'll be trying to generate 32-bit binaries, which will need to link with a 32-bit libc. Which is fine, if you already have a 32-bit libc, but it sounds like you don't.

i.e.

$ tar xvjf gcc-*.tar.bz2
$ cd gcc-*/
$ mkdir build
$ cd build
$ ../configure --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --target=i386-pc-linux-gnu
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文