Беру 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
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
В смысле речь идет именно о моей сборке с
ftp.wagner.pp.ru/pub/debian-cosy/dists/etch ?
--
-- Мне, пожалуйста, книгу "Эффективная работа в Microsoft Windows".
-- Фантастика на втором этаже!
Hу, во-первых, эти программы используют некие сторонние библиотеки, не
входящие в состав данного компилятора. Если их из исходником им
пересобрать, что будет?
MK> Michael
--
Терпеть не могу администрировать юниксы. Hо еще меньше я люблю работать
на криво настроенных системах...
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
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]
Сначала разобраться почему не работают примитивные, а потом уже идти
дальше.
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
--
-- Есть ли у Вас план, мистер Керниган?
-- Есть ли у меня план? Да у меня их целых девять!
Угу. Читаем внимательно --target в subject.
В MS-DOS не предусмотрено сокетов на уровне OS. Поэтому реализация их
делается сторонними библиотеками, например Waterloo TCP. Кстати,
разберусь с компилятором, надо будет её тоже запакетировать.
Кстати, в более других системах socket обычно тоже не входит состав
библиотек, поставляемых с компилятором. Он входит в системную libc.
--
И ты Брут, и ты Брут. Все люди - брутья
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
Кстати, твой рецепт со --strip-debug тоже не помогает.
То есть программа (та, из первого поста в треде, c cout) собирается, но
при запуске дает segfault.
Следующее телодвижение по плану - это просмотреть патчи из gcc422s.zip и
попробовать поотрывать их нафиг.
MK> Michael
--
Паранойя, это когда, узнав о потопе, начинают строить сразу два ковчега
-- Т. Луговская
VW> Кстати, твой рецепт со --strip-debug тоже не помогает.
VW> То есть программа (та, из первого поста в треде, c cout) собирается, но
VW> при запуске дает segfault.
Действительно, а мои тесты работают.
VW> Следующее телодвижение по плану - это просмотреть патчи из gcc422s.zip и
VW> попробовать поотрывать их нафиг.
С этого я начал неделю назад, не помогло.
Michael
Твои тесты - это же не плюсы, а 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
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
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
Я тут обратил внимание на то, что сами djgpp-шники собирают
не для i386-pc-msdosdjgpp, а для i586-pc-msdosdjgpp. Hе знаю, на что это
влияет, и можно ли жить с компилятором для DOS, генерирующим программы,
требующие процессора не ниже Pentium, но завтра попробую.
--
Это не романтика, это какая-то некромантика
VW> Я тут обратил внимание на то, что сами djgpp-шники собирают
VW> не для i386-pc-msdosdjgpp, а для i586-pc-msdosdjgpp. Hе знаю, на что это
VW> влияет, и можно ли жить с компилятором для DOS, генерирующим программы,
VW> требующие процессора не ниже Pentium, но завтра попробую.
Меня больше заинтересовали diffы, которые лежат внутри src.rpm.
Michael
MK> Меня больше заинтересовали diffы, которые лежат внутри src.rpm.
Да, djcross-binutils*.diff как будто решают проблему. Проверено на hello и mplayer.
Michael
Пришли мне на почту сам diff или в эху URL на соответствующий src.rpm
--
Диспетчер: -- Вы что, ни разу не летали в Гамбург?
Пилот British Airways: -- Летал, в 44-м. Hо тогда я здесь не садился.
MK>> Да, djcross-binutils*.diff как будто решают проблему.
VW> Пришли мне на почту сам diff или в эху URL на соответствующий src.rpm
ftp://ftp.delorie.com/pub/djgpp/rpms/djcross-binutils-2.17-5.src.rpm
Michael
Угу. Собралось, вроде работает.
Там, кстати, еще 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 в пакет, я его с удовольствием у
себя выложу.
--
Этот нетшкаф ни в какие нетдвери не лезет.