如何在64位x86环境下编译32位x86应用程序
How to compile 32bit x86 application in 64bit x86 environment?
如何在64位x86环境下编译32位x86应用程序?
cc/ld/ar的任何命令,包括选项?谢谢。
任何链接都是非常赞赏的。谢谢。
要用64位多库GCC编译和链接C源文件,您可以执行以下操作:
gcc -m32 -c somefile.c
gcc -m32 somefile.o -o myprog
请注意,所有32位的库都需要安装并由多库编译器使用。
ar
应该工作,如果构建正确,不鼓励直接调用ld
,因为它的选项与GCC的完全不同。链接到GCC。
至于为什么"不鼓励直接调用ld
":如果你把gcc
链接起来,它将确切地知道系统/运行时库的位置,以及它需要传递给ld
的任何平台特定选项。当直接调用ld
时,您需要处理所有这些。在这里,32和64位的选项很重要,以及适当的库目录。
是的,只要使用-m32
并确保安装了所有32位工具和库(不是所有的x86-64发行版默认包含这些,所以你可能需要apt-get
或yast
或其他来安装这些)。
$ gcc -m32 -Wall foo.c -o foo
是的,我需要-D_FILE_OFFSET_BITS=64有时-m32有时会产生一些麻烦,所以你必须自己尝试。
c++ -m32 -D_FILE_OFFSET_BITS=64 foo.c -o foo
但这是反过来的。在32位机上编译64位程序
-m32
标志是你所需要的,即
gcc -m32 ...
如果您得到一个错误,您可能需要32位库,可能命名类似于glibc-devel.i686
。这是Fedora上的包名(使用yum
),其他Linux发行版应该类似。
在Debian &Ubuntu,你需要gcc-multilib
和ia32-libs-dev
软件包
相关文章:
- 为x86而非x64编译时出错
- 如何为在 x86 主机上为 arm 目标交叉编译的项目安装依赖项
- X86系统的编译读取线(静态模式)
- C++/CLR:仅在编译 x86 时出现命令行错误
- 无法为 x86 编译代码,但可以为 arm 编译代码
- LNK2001在X64环境中的编译代码上看到的错误.但是,该代码在X86环境中填充了罚款
- Clang没有为X86以外的其他平台编译代码
- OpenSSL编译在x86上失败,认为x86_64是成功的
- G++ 无法使用 Boost for x86 编译代码
- C++中的指针和对象,x86 编译错误
- 如何将 x86 编译库附加到安卓项目
- 在编译期间混合 x86 和 x64 静态库C++
- 无法使用 x86 g++ 编译 x64 LD_PRELOAD
- 在x86中编译引用C++/CLI DLL的C#项目时,MSBuild无法生成
- 错误0xc000007b:试图在没有VS的计算机上运行编译为Release x86的C++.exe文件
- C++指针到方法模板推导在面向 x86 时不编译,但适用于 x64
- C++字符数组参数在x86编译中包含奇怪的字符
- C++在Mac OS X上编译代码,并在Linux x86上运行
- 假设任何x86编译的应用程序总是在x64版本下运行是安全的吗?
- 使用 Android NDK 为 x86 编译 FFmpeg 3.1.1