Я впервые установил 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-битный? ^^ [тысяча сто двадцать одна]
Очень странно, что независимо от того, что программа, которую Вы пытаетесь скомпилировать, поставляет двоичную библиотеку на 32 бита вместо своего исходного кода, но по-видимому эта библиотека может быть найдена здесь , и если Вы компилируете это, необходимо получить 64 бита libgll, что необходимо смочь использовать для компиляции этой программы для 64 битов.
[[ -f $file ]] &&
перед тем, чтобы называть файл. Это позволит нам срывать типы файлов мы don' t заботятся о, такие как каталоги. – glenn jackman 27 August 2017 в 00:36