Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Сборка gcc 4.2.2 --target=i386-pc-msdos-djgpp

70 views
Skip to first unread message

Victor Wagner

unread,
Nov 13, 2007, 4:56:28 AM11/13/07
to

Может быть кто подскажет в чем проблема - собираю кросс-компилятор для
сборки программ для MS-DOS.

Беру gcc-4.2.2.tar.bz, беру с www.delorie.com gcc422s2.zip (набор патчей
для сборки кросс-компилятора) прикладываю, собираю:

ac_cv_func_mmap_dev_zero=no
cd $(build_src_gcc)&& ./configure -v \
--prefix=/usr \
--target=i386-pc-msdosdjgpp \
--disable-nls\
--host=i686-pc-linux-gnu \
--enable-languages=c,c++ \
--enable-version-specific-runtime-libs\
--with-headers="/usr/i386-pc-msdosdjgpp/include"

(предварительно собираю binutils 2.17 и устанавливаю их в /usr/i386-pc-msdosdjgpp/bin, делаю линки /usr/bin/i386-pc-msdosdjggp-ld etc)

Получаю следующие проблемы:

1. Все библиотеки в /usr/lib/gcc/i386-pc-msdosdjgpp не имеют индекса.
судя по логу make на них напускали /usr/bin/ar вместо /usr/bin/i386-pc-msdosdjgpp-ar. Hу это, понятно, фиксится запуском правильного ranlib

2. При сборке C++ программы выдается следующая ошибка
i386-pc-msdosdjgpp-g++ -o hello.exe hello.cpp
/usr/lib/gcc/i386-pc-msdosdjgpp/4.2.2/../../../../i386-pc-msdosdjgpp/bin/ld: section .ctors [0003ae3c -> 0003ae53] overlaps section .text [00001a88 -> 00049fff]
collect2: ld returned 1 exit status

Программы на C компилируются вроде нормально.

Посоветуйте в какую сторону копать.


--
Hа мраморе мы выбъем на века
Четырёхстрочный скрипт на awk

Michael Kostylev

unread,
Nov 13, 2007, 7:02:26 AM11/13/07
to

At Tue, 13 Nov 2007 09:56:28 +0000 (UTC),
Victor Wagner wrote:


VW> i386-pc-msdosdjgpp-g++ -o hello.exe hello.cpp
VW> /usr/lib/gcc/i386-pc-msdosdjgpp/4.2.2/../../../../i386-pc-msdosdjgpp/bin/ld: section .ctors [0003ae3c -> 0003ae53] overlaps section .text [00001a88 -> 00049fff]
VW> collect2: ld returned 1 exit status
VW> Программы на C компилируются вроде нормально.

ет.

#include <netdb.h>
#include <sys/socket.h>
int main(void) { (void) gethostbyname(0); (void) socket(AF_INET, SOCK_STREAM, 0); return 0; }

или

#include <allegro.h>
int main(void) { allegro_init(); install_sound(DIGI_AUTODETECT, MIDI_NONE, NULL); return 0; }

тоже никак с аналогичным диагнозом.

Michael

Victor Wagner

unread,
Nov 13, 2007, 7:47:22 AM11/13/07
to
Michael Kostylev <m...@niipt.ru> wrote:
MK> At Tue, 13 Nov 2007 09:56:28 +0000 (UTC), Victor Wagner

MK> wrote:
VW>> i386-pc-msdosdjgpp-g++ -o hello.exe hello.cpp
VW>> /usr/lib/gcc/i386-pc-msdosdjgpp/4.2.2/../../../../i386-pc
VW>> -msdosdjgpp/bin/ld: section .ctors [0003ae3c -> 0003ae53]
VW>> overlaps section .text [00001a88 -> 00049fff] collect2:
VW>> ld returned 1 exit status Программы на C компилируются
VW>> вроде нормально.
MK> ет.

В смысле речь идет именно о моей сборке с
ftp.wagner.pp.ru/pub/debian-cosy/dists/etch ?


--
-- Мне, пожалуйста, книгу "Эффективная работа в Microsoft Windows".
-- Фантастика на втором этаже!

Victor Wagner

unread,
Nov 13, 2007, 7:51:55 AM11/13/07
to
Michael Kostylev <m...@niipt.ru> wrote:
MK> At Tue, 13 Nov 2007 09:56:28 +0000 (UTC), Victor Wagner

MK> wrote:
VW>> i386-pc-msdosdjgpp-g++ -o hello.exe hello.cpp
VW>> /usr/lib/gcc/i386-pc-msdosdjgpp/4.2.2/../../../../i386-pc
VW>> -msdosdjgpp/bin/ld: section .ctors [0003ae3c -> 0003ae53]
VW>> overlaps section .text [00001a88 -> 00049fff] collect2:
VW>> ld returned 1 exit status Программы на C компилируются
VW>> вроде нормально.
MK> ет.
MK> #include <netdb.h> #include <sys/socket.h> int main(void)
MK> { (void) gethostbyname(0); (void) socket(AF_INET,
MK> SOCK_STREAM, 0); return 0; }
MK> или
MK> #include <allegro.h> int main(void) { allegro_init();
MK> install_sound(DIGI_AUTODETECT, MIDI_NONE, NULL); return 0;
MK> }
MK> тоже никак с аналогичным диагнозом.

Hу, во-первых, эти программы используют некие сторонние библиотеки, не
входящие в состав данного компилятора. Если их из исходником им
пересобрать, что будет?

MK> Michael
--
Терпеть не могу администрировать юниксы. Hо еще меньше я люблю работать
на криво настроенных системах...

Michael Kostylev

unread,
Nov 13, 2007, 1:32:58 PM11/13/07
to

At Tue, 13 Nov 2007 12:51:55 +0000 (UTC),
Victor Wagner wrote:

VW>>> i386-pc-msdosdjgpp-g++ -o hello.exe hello.cpp
VW>>> /usr/lib/gcc/i386-pc-msdosdjgpp/4.2.2/../../../../i386-pc
VW>>> -msdosdjgpp/bin/ld: section .ctors [0003ae3c -> 0003ae53]
VW>>> overlaps section .text [00001a88 -> 00049fff] collect2:
VW>>> ld returned 1 exit status Программы на C компилируются
VW>>> вроде нормально.
MK>> ет.
MK>> #include <netdb.h> #include <sys/socket.h> int main(void)
MK>> { (void) gethostbyname(0); (void) socket(AF_INET,
MK>> SOCK_STREAM, 0); return 0; }
MK>> или
MK>> #include <allegro.h> int main(void) { allegro_init();
MK>> install_sound(DIGI_AUTODETECT, MIDI_NONE, NULL); return 0;
MK>> }
MK>> тоже никак с аналогичным диагнозом.

VW> Hу, во-первых, эти программы используют некие сторонние библиотеки, не
VW> входящие в состав данного компилятора.

Что делать, мне интересны именно такие программы, а не `hello, world'.

VW> Если их из исходником им пересобрать, что будет?

То же самое. Более интересный результат получается, если в debian/rules вставить

$(target)-strip --strip-debug debian/$(package)/usr/$(target)/lib/*.a
$(target)-strip --strip-debug debian/$(package)/usr/lib/gcc/$(target)/$(version)/*.a

что прямо таки забавно. Единственный тест из MPlayer-1.0rc2/configure, который не проходит:

#include <libsmbclient.h>
int main(void) { smbc_opendir("smb://"); return 0; }

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

Michael

Stanislav Shwartsman

unread,
Nov 13, 2007, 12:30:39 PM11/13/07
to
Hello Victor!

13 Nov 07 15:51, you wrote to Michael Kostylev:

VW>>> i386-pc-msdosdjgpp-g++ -o hello.exe hello.cpp
VW>>> /usr/lib/gcc/i386-pc-msdosdjgpp/4.2.2/../../../../i386-pc
VW>>> -msdosdjgpp/bin/ld: section .ctors [0003ae3c -> 0003ae53]
VW>>> overlaps section .text [00001a88 -> 00049fff] collect2:
VW>>> ld returned 1 exit status Программы на C компилируются
VW>>> вроде нормально.
MK>> ет.
MK>> #include <netdb.h> #include <sys/socket.h> int main(void)
MK>> { (void) gethostbyname(0); (void) socket(AF_INET,
MK>> SOCK_STREAM, 0); return 0; }
MK>> или
MK>> #include <allegro.h> int main(void) { allegro_init();
MK>> install_sound(DIGI_AUTODETECT, MIDI_NONE, NULL); return 0;
MK>> }
MK>> тоже никак с аналогичным диагнозом.

VW> Hу, во-первых, эти программы используют некие сторонние библиотеки, не
VW> входящие в состав данного компилятора. Если их из исходником им
VW> пересобрать, что будет?

Это socket-то не входит в состав библиотек с компилятором ?

Voice Phones: 972-4-8330554 (home), 972-5-4481073 (cell)

Bye ! [Team Intel Centrino Technology]
Stanislav (AKA Night's Man) [Team Technion]

Victor Wagner

unread,
Nov 13, 2007, 3:10:13 PM11/13/07
to
Michael Kostylev <m...@niipt.ru> wrote:
MK> At Tue, 13 Nov 2007 12:51:55 +0000 (UTC), Victor Wagner

MK> wrote:
VW>> Hу, во-первых, эти программы используют некие сторонние
VW>> библиотеки, не входящие в состав данного компилятора.
MK> Что делать, мне интересны именно такие программы, а не
MK> `hello, world'.

Сначала разобраться почему не работают примитивные, а потом уже идти
дальше.

VW>> Если их из исходником им пересобрать, что будет?

MK> То же самое. Более интересный результат получается, если в
MK> debian/rules вставить
MK> $(target)-strip --strip-debug

Интересно. Попробую.

MK> debian/$(package)/usr/$(target)/lib/*.a $(target)-strip
MK> --strip-debug
MK> debian/$(package)/usr/lib/gcc/$(target)/$(version)/*.a
MK> что прямо таки забавно. Единственный тест из
MK> MPlayer-1.0rc2/configure, который не проходит:
MK> #include <libsmbclient.h> int main(void) {
MK> smbc_opendir("smb://"); return 0; }
MK> Впрочем, сильно сомневаюсь, что strip поможет собрать
MK> mplayer. Из libavcodec втягивается настолько жирный кусок,
MK> что опять что-нибудь лопнет.

Hу как-то его под DOS собирают вроде.

MK> Michael
--
-- Есть ли у Вас план, мистер Керниган?
-- Есть ли у меня план? Да у меня их целых девять!

Victor Wagner

unread,
Nov 13, 2007, 3:12:14 PM11/13/07
to
Stanislav Shwartsman

<Stanislav....@f520.n400.z2.fidonet.org> wrote:
VW>> Hу, во-первых, эти программы используют некие сторонние
VW>> библиотеки, не входящие в состав данного компилятора.
VW>> Если их из исходником им пересобрать, что будет?
SS> Это socket-то не входит в состав библиотек с компилятором
SS> ?

Угу. Читаем внимательно --target в subject.

В MS-DOS не предусмотрено сокетов на уровне OS. Поэтому реализация их
делается сторонними библиотеками, например Waterloo TCP. Кстати,
разберусь с компилятором, надо будет её тоже запакетировать.

Кстати, в более других системах socket обычно тоже не входит состав
библиотек, поставляемых с компилятором. Он входит в системную libc.


--
И ты Брут, и ты Брут. Все люди - брутья

Michael Kostylev

unread,
Nov 13, 2007, 4:16:20 PM11/13/07
to

At Tue, 13 Nov 2007 20:10:13 +0000 (UTC),
Victor Wagner wrote:

MK>> Впрочем, сильно сомневаюсь, что strip поможет собрать
MK>> mplayer. Из libavcodec втягивается настолько жирный кусок,
MK>> что опять что-нибудь лопнет.

VW> Hу как-то его под DOS собирают вроде.

gcc-3.3.2 (ага, тоже из debian-cosy) мне его с марта собирает с помощью binutils >= 2.17. Hа delorie.com сейчас дают gcc-4.2.2 вместе с binutils-2.17, и проблем тоже нет. Впрочем, для чистоты эксперимента откатить binutils можно.

Michael

Victor Wagner

unread,
Nov 14, 2007, 1:55:29 AM11/14/07
to
Michael Kostylev <m...@niipt.ru> wrote:
MK> At Tue, 13 Nov 2007 20:10:13 +0000 (UTC), Victor Wagner

MK> wrote:
MK>>> Впрочем, сильно сомневаюсь, что strip поможет собрать
MK>>> mplayer. Из libavcodec втягивается настолько жирный
MK>>> кусок, что опять что-нибудь лопнет.
VW>> Hу как-то его под DOS собирают вроде.
MK> gcc-3.3.2 (ага, тоже из debian-cosy) мне его с марта
MK> собирает с помощью binutils >= 2.17. Hа delorie.com сейчас
MK> дают gcc-4.2.2 вместе с binutils-2.17, и проблем тоже нет.
MK> Впрочем, для чистоты эксперимента откатить binutils можно.

Попробовал, не помогло.

Кстати, твой рецепт со --strip-debug тоже не помогает.
То есть программа (та, из первого поста в треде, c cout) собирается, но
при запуске дает segfault.

Следующее телодвижение по плану - это просмотреть патчи из gcc422s.zip и
попробовать поотрывать их нафиг.


MK> Michael
--
Паранойя, это когда, узнав о потопе, начинают строить сразу два ковчега
-- Т. Луговская

Michael Kostylev

unread,
Nov 14, 2007, 2:42:27 AM11/14/07
to

At Wed, 14 Nov 2007 06:55:29 +0000 (UTC),
Victor Wagner wrote:

VW> Кстати, твой рецепт со --strip-debug тоже не помогает.
VW> То есть программа (та, из первого поста в треде, c cout) собирается, но
VW> при запуске дает segfault.

Действительно, а мои тесты работают.

VW> Следующее телодвижение по плану - это просмотреть патчи из gcc422s.zip и
VW> попробовать поотрывать их нафиг.

С этого я начал неделю назад, не помогло.

Michael

Victor Wagner

unread,
Nov 14, 2007, 4:47:03 AM11/14/07
to
Michael Kostylev <m...@niipt.ru> wrote:
MK> At Wed, 14 Nov 2007 06:55:29 +0000 (UTC), Victor Wagner
MK> wrote:
VW>> Кстати, твой рецепт со --strip-debug тоже не помогает. То
VW>> есть программа (та, из первого поста в треде, c cout)
VW>> собирается, но при запуске дает segfault.
MK> Действительно, а мои тесты работают.

Твои тесты - это же не плюсы, а C. Похоже, глюка именно в компиляторе
C++.

VW>> Следующее телодвижение по плану - это просмотреть патчи

VW>> из gcc422s.zip и попробовать поотрывать их нафиг.
MK> С этого я начал неделю назад, не помогло. Michael

В смысле - что именно ты откатывал? Или просто попробовал собрать
кросс-компилятор не накатывая никаких патчей?

Тогда, вероятно, надо откатывать компилятор на 4.2.1

--
You think you know when you learn, are more sure when you can write,
even more when you teach, but certain when you can program

Michael Kostylev

unread,
Nov 14, 2007, 8:53:47 AM11/14/07
to

At Wed, 14 Nov 2007 09:47:03 +0000 (UTC),
Victor Wagner wrote:

VW>>> Кстати, твой рецепт со --strip-debug тоже не помогает. То
VW>>> есть программа (та, из первого поста в треде, c cout)
VW>>> собирается, но при запуске дает segfault.
MK>> Действительно, а мои тесты работают.

VW> Твои тесты - это же не плюсы, а C. Похоже, глюка именно в компиляторе
VW> C++.

Мне не особо легче от того, что as выдает годные .o, которые ест ld, но не collect2.

VW>>> Следующее телодвижение по плану - это просмотреть патчи
VW>>> из gcc422s.zip и попробовать поотрывать их нафиг.
MK>> С этого я начал неделю назад, не помогло.

VW> В смысле - что именно ты откатывал? Или просто попробовал собрать
VW> кросс-компилятор не накатывая никаких патчей?

Последнее.

VW> Тогда, вероятно, надо откатывать компилятор на 4.2.1

Michael

Michael Kostylev

unread,
Nov 14, 2007, 12:07:10 PM11/14/07
to

At Wed, 14 Nov 2007 09:47:03 +0000 (UTC),
Victor Wagner wrote:

VW> Твои тесты - это же не плюсы, а C. Похоже, глюка именно в компиляторе
VW> C++.

xgcc, оказывается, тоже не работает
build_dir/gnu/gcc-4.2.2/i386-pc-msdosdjgpp/libiberty/config.log:
configure:7261: checking for psignal
configure:7317: /home/mik/src/djgpp-4.2.2.orig/build_dir/gnu/gcc-4.2.2/host-i386-pc-linux-gnu/gcc/xgcc -B/home/mik/src/djgpp-4.2.2.orig/build_dir/gnu/gcc-4.2.2/host-i386-pc-linux-gnu/gcc/ -B/usr/i386-pc-msdosdjgpp/bin/ -B/usr/i386-pc-msdosdjgpp/lib/ -isystem /usr/i386-pc-msdosdjgpp/include -isystem /usr/i386-pc-msdosdjgpp/sys-include -o conftest.exe -O2 -g -O2 conftest.c >&5
/usr/i386-pc-msdosdjgpp/bin/ld: section .ctors [00002b24 -> 00002b27] overlaps section .text [00001a60 -> 0000edff]
collect2: ld returned 1 exit status

Аналогично падает checking for sys_siglist.

VW> Тогда, вероятно, надо откатывать компилятор на 4.2.1

Результат отрицательный.

Michael

Victor Wagner

unread,
Nov 14, 2007, 4:02:00 PM11/14/07
to
Michael Kostylev <m...@niipt.ru> wrote:
MK> At Wed, 14 Nov 2007 09:47:03 +0000 (UTC), Victor Wagner
MK> Аналогично падает checking for sys_siglist.
VW>> Тогда, вероятно, надо откатывать компилятор на 4.2.1
MK> Результат отрицательный.

Я тут обратил внимание на то, что сами djgpp-шники собирают
не для i386-pc-msdosdjgpp, а для i586-pc-msdosdjgpp. Hе знаю, на что это
влияет, и можно ли жить с компилятором для DOS, генерирующим программы,
требующие процессора не ниже Pentium, но завтра попробую.

--
Это не романтика, это какая-то некромантика

Michael Kostylev

unread,
Nov 14, 2007, 4:30:11 PM11/14/07
to

At Wed, 14 Nov 2007 21:02:00 +0000 (UTC),
Victor Wagner wrote:

VW> Я тут обратил внимание на то, что сами djgpp-шники собирают
VW> не для i386-pc-msdosdjgpp, а для i586-pc-msdosdjgpp. Hе знаю, на что это
VW> влияет, и можно ли жить с компилятором для DOS, генерирующим программы,
VW> требующие процессора не ниже Pentium, но завтра попробую.

Меня больше заинтересовали diffы, которые лежат внутри src.rpm.

Michael

Michael Kostylev

unread,
Nov 15, 2007, 6:16:39 AM11/15/07
to

At Wed, 14 Nov 2007 21:30:11 +0000 (UTC),
Michael Kostylev wrote:

MK> Меня больше заинтересовали diffы, которые лежат внутри src.rpm.

Да, djcross-binutils*.diff как будто решают проблему. Проверено на hello и mplayer.

Michael

Victor Wagner

unread,
Nov 15, 2007, 9:26:21 AM11/15/07
to
Michael Kostylev <m...@niipt.ru> wrote:
MK> At Wed, 14 Nov 2007 21:30:11 +0000 (UTC), Michael Kostylev

MK> wrote:
MK>> Меня больше заинтересовали diffы, которые лежат внутри
MK>> src.rpm.
MK> Да, djcross-binutils*.diff как будто решают проблему.

Пришли мне на почту сам diff или в эху URL на соответствующий src.rpm

--
Диспетчер: -- Вы что, ни разу не летали в Гамбург?
Пилот British Airways: -- Летал, в 44-м. Hо тогда я здесь не садился.

Michael Kostylev

unread,
Nov 15, 2007, 10:28:12 AM11/15/07
to

At Thu, 15 Nov 2007 14:26:21 +0000 (UTC),
Victor Wagner wrote:

MK>> Да, djcross-binutils*.diff как будто решают проблему.

VW> Пришли мне на почту сам diff или в эху URL на соответствующий src.rpm

ftp://ftp.delorie.com/pub/djgpp/rpms/djcross-binutils-2.17-5.src.rpm

Michael

Victor Wagner

unread,
Nov 15, 2007, 2:17:23 PM11/15/07
to
Michael Kostylev <m...@niipt.ru> wrote:
MK> At Thu, 15 Nov 2007 14:26:21 +0000 (UTC), Victor Wagner

MK> wrote:
MK>>> Да, djcross-binutils*.diff как будто решают проблему.
VW>> Пришли мне на почту сам diff или в эху URL на
VW>> соответствующий src.rpm
MK> ftp://ftp.delorie.com/pub/djgpp/rpms/djcross-binutils-2.17

Угу. Собралось, вроде работает.

Там, кстати, еще djcrx--2.04pre_20071021-8ap.src.rpm

Думаю, озадачиться научиться собирать пакет djgpp-runtime из него, а не
из бинарников, из которых я его сейчас собираю.

Потому что это даст возможность оперативно править исходники libc при
необходимости. Hу и опять же - свежее оно.

Еще бы dxe3tool под Linux собрать... Чтобы можно было подгружаемые
dlopen-ом модули под DOS делать.

Hу и еще кое-каких библиотек для кросс-сборки пособирать в пакеты.
Первыми, очевидно, будут zlib и expat - я их уже собираю для migw32 и
они используются в нашем софте.

Потом, вероятно, wattcp - он мне бывает нужен для сборки tcl.

Вот, соберусь ли я делать пакет для djgpp-libtcl - не уверен.
Как-то идея делать кроссплатформные текстмодовые интерфейсы на tcl/ck
не очень у нас в фирме прижилась.

Hо если ты соберешь, скажем, allegro в пакет, я его с удовольствием у
себя выложу.
--
Этот нетшкаф ни в какие нетдвери не лезет.

0 new messages