我有一个专有程序,我试图在64位系统上使用.
当我启动设置它可以正常工作,但在它尝试更新自己并编译一些模块后,它无法加载它们.
我怀疑它是因为它使用gcc和gcc尝试为64位系统编译它们,因此该程序不能使用这些模块.
是否有任何方法(一些环境变量或类似的东西)迫使gcc为32位平台做所有事情.32位chroot会工作吗?
很抱歉,有许多类似的问题,但我确实发现谷歌搜索CMake查询总是产生类似但不相同的场景,冲突的CMake命令等等!
我需要强制我的项目构建32位二进制文件,因为我必须链接一个只能作为32位的库.我根据错误消息诊断出这个错误,例如:
/usr/bin/ld: i386 architecture of input file `*external-32bit-lib*' is incompatible with i386:x86-64 output
Run Code Online (Sandbox Code Playgroud)
因此,我应该使用:
set (CMAKE_CXX_FLAGS "-m32")
Run Code Online (Sandbox Code Playgroud)
这确实改变了一些事情 - 我现在得到了几个错误:
/usr/bin/ld: i386 architecture of input file `*project-output-lib*' is incompatible with i386:x86-64 output
Run Code Online (Sandbox Code Playgroud)
并且仍然会获得外部库的相同错误.我认为这是因为-m32制作的gcc生成32位二进制文件,但ld仍在尝试64位输出?进一步谷歌搜索这个问题没有取得任何成功,所以如果有人能够证实我是对的,并给出正确的方法,我将非常感激!
非常感谢!
每条信息都有+1,有助于完成整个画面.你不需要知道整个答案.我会同样欣赏这个拼图的各个部分.谢谢.
我即将尝试我的第一次交叉编译.我搜索了SO和网络,发现了许多信息,但我并不总是知道如何将这些部分放在一起,因为仍然有一些缺失的部分.
我的主持人:linux Kubuntu amd64.
目标:linux kubuntu x86(32位)(应该很简单,不是吗?)
工具:g ++和cmake.
如何使用gcc/cmake在64位Linux机器上编译32位二进制文件
提到导出CFLAGS = -m32.这是一件作品.
跨平台:选择使用32/64位的
数据类型提及数据类型.我可能必须在我的代码中注意这一点.
#ifdef用于32位平台
#ifdef用于32位平台
链接到以下内容,虽然我还不太清楚如何使用它:http:
//predef.sourceforge.net/prearch.html
http://ww.ubuntuforums.org/showthread.php?t=1377396
我做了:sudo apt-get install g ++ - multilib
理想情况下,当我'make'(使用cmake)时,它应该吐出amd64二进制文件和x86二进制文件.
我的CMakeLists.txt的一部分如下所示:
add_definitions(-Wall -pthread)
add_executable (../run.amd64 user.cpp time.cpp init.cpp utils.cpp main.cpp)
target_link_libraries(../run.amd64 cppcms dbixx config++ ctemplate)
Run Code Online (Sandbox Code Playgroud)
如何引入标志-m32来创建第二个可执行文件?
我是否只想制作一个可执行文件(例如,用于测试和调试),如何告诉cmake创建一个或两个二进制文件?
此外,您可以看到我使用了一些第三方库,其中一些我必须自己编译.这是否意味着我还需要为目标主机编译每个二进制文件?有些人使用cmake,有些人使用:./ configure; 使;
如何为目标主机编译这些库(要使用的标志等)?
注意:动态链接库已经编译并安装在目标计算机上,所以也许我不需要担心这一步......我不确定:这是我遗失的部分之一......
我需要的是一种教程,或至少一些缺失的部分.我将更新这篇文章,详细介绍我取得的成就以及如何实现.
谢谢.
PS
搜索更多,我发现了这个:
http://www.mail-archive.com/cmake@cmake.org/msg26265.html
"原始设计似乎不是为了windows-linux或linux-windows而设计的交叉编译."
cmake没有测试linux amd64到linux x86.
http://www.cmake.org/Wiki/CMake_Cross_Compiling#FAQ.2FPotential_Problems
"在混合的32/64位Linux安装中,交叉编译不能仅用于构建32/64位."
??
解决方案
如何使用gcc/cmake在64位Linux机器上编译32位二进制文件
是不可能的,因为我使用第三方软件和已经使用CFLAGS变量的其他东西.我的老板说,不允许修补他们的makefile.
所以我必须找到另一种方法来强制执行它.也许有一些神奇的符号链接将调用gcc重定向到32位版本的编译器(希望不动态检测默认目标).
我需要在廉价的共享主机上设置Git客户端,使用无名的32位Linux发行版.GCC不可用,所以我无法在服务器上编译它.我确实拥有其他2个64位Linux服务器和一台OSX笔记本电脑,我可以尝试交叉编译二进制文件.但我似乎无法正确编译它; 当我将二进制文件推送到32位服务器时,它说它无法运行可执行文件.它看起来像其他来源,比如我需要在./configure中添加"-arch i386"和/或"-m32",或者让命令工作为32位,但我想我没有正确使用它们.任何人都知道如何做到这一点,或者在哪里找到通用的32位Git二进制文件?
谢谢
我正在使用Ubuntu 12.04 64位,我在编译需要32位.so文件的Qt项目时遇到以下错误.
错误:
skipping incompatible /opt/lib/libEposCmd.so when searching for -lEposCmd
我想用-m32选项编译这个项目,但我不知道我应该在哪里插入这个选项.
我一直在使用conda作为我的大量工作的包管理器,它确实有助于使用Python和二进制包来控制多个人的环境.它一直都是阳光和彩虹,而我的所有用户都使用64位Linux机器.
现在我需要支持一些32位机器.有没有办法在我的64位机器上构建32位版本的软件包?
我已经在SO上找到了这个答案,如何使用gcc/cmake在64位linux机器上编译32位二进制文件,但我无法弄清楚如何编译和上传32位和64位版本.
我已将Oracle数据库和Oracle HTTP服务器安装从32位计算机迁移到64位计算机 - 两台运行Linux的计算机.Oracle数据库是64位,但(Apache)HTTP服务器是32位.
我使用了一些非Oracle DSO(mod_ntlm为一个),但每当我运行标准的"make install"类型的东西时,我最终得到一个64位模块.
是否有一种在64位计算机上编译32位Apache模块的标准方法?