Заставить мой 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, добавив -m32 в CXXFLAGS (и другие строки?). Я могу опубликовать свой makefile, если это необходимо, чтобы вы мне помогли. ^^

Сначала я попытался просто установить все, что у меня было на моей предыдущей 32-битной машине.

Проблема в том, что я получаю следующую ошибку компиляции: / usr / bin / ld: пропуск несовместим ../../gllib-3.0b3/lib/libgll.a при поиске -lgll

Это заставило меня подумать, что, вероятно, мой (5-летний) был просто не совместим для запуска в качестве 64-битного приложения.

Или вы случайно не знаете, смогу ли я скомпилировать это как родной 64-битный? ^^ [тысяча сто двадцать одна]

0
задан 17 April 2016 в 15:56

1 ответ

Очень странно, что независимо от того, что программа, которую Вы пытаетесь скомпилировать, поставляет двоичную библиотеку на 32 бита вместо своего исходного кода, но по-видимому эта библиотека может быть найдена здесь , и если Вы компилируете это, необходимо получить 64 бита libgll, что необходимо смочь использовать для компиляции этой программы для 64 битов.

0
ответ дан 18 April 2016 в 01:56
  • 1
    Хороший ответ. I' d добавляют [[ -f $file ]] && перед тем, чтобы называть файл. Это позволит нам срывать типы файлов мы don' t заботятся о, такие как каталоги. – glenn jackman 27 August 2017 в 00:36

Другие вопросы по тегам:

Похожие вопросы: