我第一次在笔记本电脑上安装了 64 位 Ubuntu。现在我正在寻找一种方法来在此操作系统上编译我的旧生物学 C++ 项目。我有一个 .sh 文件,它安装了我的项目在新安装的 32 位 Ubuntu 上编译所需的所有软件包。该文件的内容如下:
#!/bin/sh
apt-get update # To get the latest package lists
apt-get install build-essential -y
apt-get install freeglut3-dev -y
apt-get install libsdl1.2-dev -y
apt-get install libsdl-image1.2-dev -y
apt-get install libsdl-mixer1.2-dev -y
apt-get install libopenscenegraph-dev -y
现在的问题是,在我的 64 位 Ubuntu 上安装了这些软件包并想要使用相应的 Makefile 编译我的项目后,我收到以下错误消息:
/usr/bin/ld: skipping incompatible ../../gllib-3.0b3/lib/libgll.a when searching for -lgll
/usr/bin/ld: cannot find -lgll
检查后,我现在知道该libgll.a
文件是针对elf33-i386
架构编译的。由于我不知道如何为 64 位架构重新编译此文件,因此我非常确定我必须在 32 位架构中编译我的整个项目。
长话短说,我现在的问题是:如何使该项目编译为 32 位应用程序,并在 64 位 Ubuntu 上运行它?
我的猜测是,我必须使用命令dpkg --add-architecture i386
,然后手动安装感兴趣的软件包apt-get install <package-name>:i386
。该方法的问题是,它apt-get install libsdl1.2-dev:i386
要求我卸载该build-essential
软件包。
当然,最后我还必须修改我的makefile
,添加-m32
到CXXFLAGS
(和其他行?)。makefile
如果您需要帮助,我可以发布我的。^^
我第一次尝试的是按照我以前的 32 位机器上的方式简单地安装所有内容。
问题是,我在搜索 -lgll 时出现以下编译错误:/usr/bin/ld:跳过不兼容的../../gllib-3.0b3/lib/libgll.a
这让我想到,可能我的(5 岁)孩子不适合运行 64 位应用程序。
或者您是否知道我是否应该能够将其编译为本机 64 位?^^
答案1
很奇怪,无论你试图编译什么程序,它都会提供一个 32 位二进制库而不是源代码,但显然这个库可以找到这里,如果您编译它,您应该得到一个 64 位 libgll,您应该能够使用它来为 64 位编译这个程序。