Компиляция tcpsplice на 64-битной машине

Я пытаюсь скомпилировать небольшую утилиту под названием tcpslice. Это типичное приложение GNU C. Когда я запускаю ./configure, вот вывод:

checking build system type... Invalid configuration `x86_64-pc-linux-gnuoldld': machine `x86_64-pc' not recognized
configure: error: /bin/sh ./config.sub x86_64-pc-linux-gnuoldld failed

Похоже, что он не поддерживает компиляцию как 64-битное приложение Linux. Итак, у меня есть несколько вопросов:

  1. Можно ли установить некоторые флаги, чтобы скомпилировать приложение как 32-битное и запустить его в моей 64-битной операционной системе?
  2. Можно ли обновить скрипт configure для поддержки 64-битной версии Linux? Если да, буду ли я вносить какие-то серьезные изменения в код в файлах .c?
  3. Я заметил, что на 64-разрядной машине RHEL6 в моей сети эта утилита установлена ​​и работает с идентичным номером версии (1.2a3). Могу ли я как-то загрузить исходный код, который использовался для его сборки? Я могу получить доступ к RHN, если это необходимо.

person User1    schedule 05.06.2012    source источник
comment
Установите пакеты под названием «libc32» и/или «gcc32» или что-то вроде этого.   -  person    schedule 05.06.2012
comment
Вы не можете получить программу tcpslice из пакета tcpdump rpm, доступного через репозиторий Centos rpm? Не уверен, какую версию Centos вы используете, но rpm.pbone.net/index.php3/stat/4/idpl/17839287/dir/centos_5/com/ для Centos 5 и src rpm доступен для компиляции.   -  person MichaelN    schedule 05.06.2012
comment
Это должно быть перемещено в unix.stackexchange.com   -  person Warren Young    schedule 07.06.2012


Ответы (3)


Можно ли установить некоторые флаги, чтобы скомпилировать приложение как 32-битное и запустить его в моей 64-битной операционной системе?

да. -m32 — вариант .

Можно ли обновить скрипт configure для поддержки 64-битной версии Linux? Если да, буду ли я вносить какие-то серьезные изменения в код в файлах .c?

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

Извините, я не знаю ответа на ваш 3-й вопрос.

Надеюсь, что небольшая информация, предоставленная мной, поможет в некотором роде.

person Jay    schedule 05.06.2012
comment
Спасибо за помощь. Как указать скрипту ./configure использовать -m32? ./configure -m32 терпит неудачу как нераспознанный параметр, это похоже на флаг gcc. - person User1; 05.06.2012
comment
./configure CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 Но, как я сказал в своем ответе, я не думаю, что это действительно решит вашу проблему. - person Warren Young; 08.06.2012

Вы неверно истолковали то, что говорит вам сценарий configure. Решение не имеет ничего общего с разрядностью процессора.

Ошибка сводится к слишком старой версии config.guess, которую создатель пакета сгенерировал с помощью libtoolize. Чтобы исправить это, вам нужно установить libtool, а затем сказать:

$ libtoolize --force

Вы обнаружите, что configure теперь запускается, потому что libtoolize перезаписал tarball-версию config.guess версией, подходящей для вашей системы.

Вы можете столкнуться с другой проблемой, "отсутствующим" bpf.h файлом. Просто отредактируйте tcpslice.c и измените эту строку:

#include <net/bpf.h>

to:

#include <pcap-bpf.h>

С этими двумя изменениями я получил tcpslice для сборки на моей 64-битной системе CentOS 5.

person Warren Young    schedule 07.06.2012

установить следующие пакеты:

 $apt-get install ia32-libs.

для rhel это другое:

посмотри ответ на этот вопрос:

CentOS 64-битный плохой интерпретатор ELF

person Aftnix    schedule 05.06.2012
comment
Я использую CentOS и установил glibc.i686. ./configure по-прежнему не работает так же. - person User1; 05.06.2012