Программа AC, скомпилированная под 32-битным Debian Squeeze, вызывает ошибку на 64-битном компьютере моего друга - PullRequest
2 голосов
/ 23 октября 2010

Не так давно я установил Debian и настроил его с помощью моего друга.
Вчера я скачал GCC 4.4 и создал простую программу для его тестирования.
Это код:

#include <stdio.h>

int main () {
    int result;
    printf ("Hello Wor... Linux! This is my %dst program compiled in Debian.\nHow many is 2+2?\n", 1);
    scanf ("%d", &result);
    while (result!=4) {
        printf ("Oh no! You're not going anywhere until you type the correct result! 2+2 is?\n");
        scanf ("%d", &result);
    }
    printf ("Congrats!\n");
    return 0;
}

Я скомпилировал его, набрав gcc-4.4 myfile.c в bash.Затем я попытался запустить полученный двоичный файл, и он работал так, как я хотел.Затем я отправил двоичный файл своему другу, чтобы проверить его на своем ПК.Когда он попытался запустить его, он получил сообщение об ошибке сегментации, и программа не работала.
Он также использует Debian, и версия его ядра очень похожа на мою (2.6.32-5-686).Единственное отличие состоит в том, что его ядро ​​- amd-64 (у него 64-битный процессор, а у меня 32-битное).
Почему это происходит?Означает ли это, что 64-битные пользователи Linux не смогут запускать мои 32-битные программы?Если да, могу ли я скомпилировать его так, чтобы они могли его запустить?
Обратите внимание, что я не очень разбираюсь в Linux.

Ответы [ 3 ]

5 голосов
/ 23 октября 2010

ему может понадобиться chroot для этого.

apt-get install ia32-libs 

должно работать в большинстве случаев.

см. «Использование chroot IA32 для запуска 32-битных приложений» http://alioth.debian.org/docman/view.php/30192/21/debian-amd64-howto.html#id292205

1 голос
/ 23 октября 2010

В качестве альтернативы, настройте ваш компилятор на 64-битные двоичные файлы, следуя инструкциям на OSDev wiki : Вкратце:
Установите новые репозитории в /etc/apt/sources.list

    deb http://www.tucs.org.au/~jscott4/debian/ stable main    #Primary Mirror. Hosted by University of Tasmania.

Добавьте ключ подписи:

    gpg --recv-keys 0x2F90DE4A
    gpg -a --export 0x2F90DE4A | sudo apt-key add -

Обновите ваши индексы репо и получите соответствующий пакет кросс-компиляции:

    apt-get update
    apt-get install osdev-crosscompiler-x86-64-elf

Затем используйте x86_64-эльфийский вариант gcc для цели x64.Например,

    x86_64-elf-gcc --pedantic -Wall -o foo foo.c

(На самом деле все инструменты GCC и Binutils теперь будут иметь x86_64-elf-вариант.)

EDIT - Значительно улучшены инструкции путем извлечения из ссылки вместоиз памяти.РЕДАКТИРОВАТЬ - убрал несвежее зеркало

0 голосов
/ 23 октября 2010

chroot является одним из вариантов. Но помните, что для установки 32-битных библиотек требуется много места на диске.

В качестве альтернативы вы можете скомпилировать файл для 64-битной среды, используя -m64 флаг компилятора gcc, который устанавливает int в 32 бит и long и pointer в 64 бит и генерирует код для архитектуры AMD x86-64.

...