Компиляция и компоновка 32-битного приложения в Debian 64-битной - PullRequest
1 голос
/ 20 ноября 2011

В настоящее время я пытаюсь скомпилировать и связать 32-битное приложение на моем 64-битном Debian, но во время компоновки оно не получается.

Команда, которую я использую (в моем Makefile) для компиляции:

gcc -Os -m32 -Wall -g -c $< -o $@

Кажется, это работает.

Затем я связываюсь с помощью следующей команды:

gcc -m32 -lcurses $^ -o $@

Сбой и выдача следующих ошибок:

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libcurses.so when searching for -lcurses
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libcurses.a when searching for -lcurses
/usr/bin/ld: skipping incompatible /usr/lib/libcurses.so when searching for -lcurses
/usr/bin/ld: skipping incompatible /usr/lib/libcurses.a when searching for -lcurses
/usr/bin/ld: cannot find -lcurses
collect2: ld returned 1 exit status    

То, что я пробовал до сих пор (обычные решения, которые я нашел в других местах в Интернете):

  • установка gcc-multilib
  • установка lib32ncurses5 и lib32ncurses6dev
  • добавление опции -L/usr/lib32 к команде ссылки

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

Ответы [ 3 ]

2 голосов
/ 20 ноября 2011

Есть две проблемы:

  1. Ваша команда ссылки неверна: порядок библиотек в строке ссылки имеет значение . Команда должна быть: gcc -m32 $^ -o $@ -lcurses
  2. Поскольку вы хотите связать с ncurses , введите последний аргумент -lncurses.
0 голосов
/ 20 ноября 2011

Вам, вероятно, нужен пакет lib32ncurses5-dev или что-то подобное, обеспечивающее пакет разработки 32-битного варианта для ncurses.

0 голосов
/ 20 ноября 2011

Сообщение показывает, что gcc не нашел 32-битную библиотеку ncurse.

Быстрое решение: глядя на мою машину (Ubuntu 11.10), я думаю, должно быть

gcc -m32 -lncurses $^ -o $@ -v

Где библиотека на самом деле находится в /lib32/libncurses.so.5.9.

Как правило, попробуйте, если вы столкнулись с проблемой.

gcc -m32 -lcurses $^ -o $@ -v

Это напечатает много вещей.

Найдите параметры, похожие на -L, и попытайтесь найти библиотечный файл (libfoo.so или libfoo.a) в каталоге.

...