使我的 32 位元程式碼在 64 位元 Ubuntu 上編譯(尋找安全路徑)

使我的 32 位元程式碼在 64 位元 Ubuntu 上編譯(尋找安全路徑)

我第一次在筆記型電腦上安裝 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,添加-m32CXXFLAGS(和其他行?)。makefile如果您需要幫助我,我可以發布我的信息。 ^^

我首先嘗試的是按照我在以前的 32 位元機器上的方式簡單地安裝所有內容。

問題是,我收到以下編譯錯誤: /usr/bin/ld: 在搜尋 -lgll 時跳過不相容的../../gllib-3.0b3/lib/libgll.a

這讓我覺得我的(5 歲的)可能不相容於作為 64 位元應用程式運行。

或者您知道我是否應該能夠將其編譯為本機 64 位元? ^^

答案1

非常奇怪的是,無論您嘗試編譯什麼程序,都會附帶一個 32 位元二進位庫而不是源代碼,但顯然可以找到該庫這裡,如果你編譯它,你應該得到一個 64 位元 libgll,你應該可以用它來編譯這個程式的 64 位元。

相關內容