使用gcc 32位编译,作为带有-m64的64位程序
compiling using gcc 32bit, as a 64 bit program with -m64
我有32位gcc。由于我所有的第三方库都是64位的,而且由于项目的限制,我将不得不在solaris中将我的应用程序构建到64位。
希望我可以在32位gcc编译器中使用-m64选项来实现这一点。
但我不确定这一点是否足以成功构建。
即使在32位编译器中使用-m64,我也会重复出现wrong ELF class: ELFCLASS64
错误。我发现这是由于32/64位库不匹配造成的。
以下是我的gcc 32位lib目录的内容
ls -ltr /xxx/xxx/gcc/32-bit/4.4.1/lib/
4096 Aug 17 2009 gcc
894 Aug 17 2009 libsupc++.la
574980 Aug 17 2009 libsupc++.a
5670284 Aug 17 2009 libstdc++.so.6.0.12
960 Aug 17 2009 libstdc++.la
7507622 Aug 17 2009 libstdc++.a
4096 Aug 17 2009 debug
26504 Aug 17 2009 libssp.so.0.0.0
933 Aug 17 2009 libssp.la
44866 Aug 17 2009 libssp.a
915 Aug 17 2009 libssp_nonshared.la
2402 Aug 17 2009 libssp_nonshared.a
228812 Aug 17 2009 libgcc_s.so.1
3081544 Aug 17 2009 libgfortran.so.3.0.0
972 Aug 17 2009 libgfortran.la
4360794 Aug 17 2009 libgfortran.a
611750 Aug 17 2009 libiberty.a
4096 Aug 17 2009 amd64
170 Aug 17 2009 libgomp.spec
247908 Aug 17 2009 libgomp.so.1.0.0
945 Aug 17 2009 libgomp.la
333476 Aug 17 2009 libgomp.a
13 Aug 17 2009 libgcc_s.so -> libgcc_s.so.1
20 Aug 17 2009 libgfortran.so -> libgfortran.so.3.0.0
20 Aug 17 2009 libgfortran.so.3 -> libgfortran.so.3.0.0
16 Aug 17 2009 libgomp.so -> libgomp.so.1.0.0
16 Aug 17 2009 libgomp.so.1 -> libgomp.so.1.0.0
15 Aug 17 2009 libssp.so -> libssp.so.0.0.0
15 Aug 17 2009 libssp.so.0 -> libssp.so.0.0.0
19 Aug 17 2009 libstdc++.so -> libstdc++.so.6.0.12
19 Aug 17 2009 libstdc++.so.6 -> libstdc++.so.6.0.12
所有这些C++库都是32位的,不是吗?我需要找到它们的64位等价物才能成功构建吗?
"-m64"标志告诉编译器生成一个64位对象。无论生成二进制文件的编译器的ELF类是什么,64位二进制文件都需要64位库。导致错误的库的完整路径是什么?您可能需要更改一些编译器/链接器参数和/或环境变量,以获得正确的64位库。
好吧,这与您的问题没有直接关系,但请看一下使用Oracle的SolarisStudio下载和编译。
Studio C++编译器有一个"-xport64"选项,它非常善于检测64位代码的问题,尤其是那些习惯于32位ILP32模型的开发人员编写的代码,他们会不假思索地将指针或size_t值填充到int变量中。据我所知,要让GCC发出一组仅与64位相关的编程错误/警告,并没有真正简单的方法。
如果您使用"-xport64"编译C++代码,您可能会对所看到的警告和错误感到震惊。
相关文章:
- 将应用程序从32位移植到64位时出现问题
- 64位机器上的C++内存对齐
- qmake:检测目标位宽(32 位或 64 位)
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- Qt 5.11.2 (Clang 8.0 (Apple), 64 位), 找不到 QJSEngine 文件
- 在 64 位边界上对齐C++结构数组?
- 如何为字符串生成唯一但一致的 N 位哈希(小于 64 位)?
- 在 64 位的 c++ 中运行 mstest 测试
- 在两个线程上读/写 64 位,无互斥/锁定/原子
- 浮点数为 32 位和 64 位二进制表示形式
- 是否有 64 位等效于 GetLastInputInfo / LASTINPUTINFO?
- 所有可能的链接生成器与64位密钥
- WinAPI C++如何从 64 位应用程序加载资源
- 在 c++ 中输出 64 位整数
- 使用192/256位整数求和无符号64位整数向量的点积的最快方法
- 如何在 64 位平台上计算 32 位哈希C++?
- 使用 SysNative 在 Visual Studio 中创建 64 位应用程序
- 在 64 位整数内旋转(90°)位矩阵(最多 8x8 位)
- 64 位进程中的 AnyCPU C# DLL 无法引用 64 位C++ DLL(给出错误:无法加载文件或程序集)
- 使用gcc 32位编译,作为带有-m64的64位程序