LINUX.ORG.RU

[gentoo x86_64][crossdev][mingw32] Не собирается GCC.

 


0

0

Пытаюсь собрать mingw32 через crossdev crossdev -t i686-pc-mingw32. В логах получаю вот это:

/bin/sh ../../../libtool --tag=CC --mode=link /var/tmp/cross/i686-pc-mingw32/portage/cross-i686-pc-mingw32/gcc-4.4.4-r1/work/gcc-4.4.4/host-x86_64-unknown-linux-gnu/gcc/xgcc -B/var/tmp/cross/i686-pc-mingw32/portage/cross-i686-pc-mingw32/gcc-4.4.4-r1/work/gcc-4.4.4/host-x86_64-unknown-linux-gnu/gcc/ -B/usr/x86_64-unknown-linux-gnu/bin/ -B/usr/x86_64-unknown-linux-gnu/lib/ -isystem /usr/x86_64-unknown-linux-gnu/include -isystem /usr/x86_64-unknown-linux-gnu/sys-include  -m32 -W -Wall -Wmissing-declarations -Wwrite-strings -Wmissing-prototypes -Wno-long-long  -fexceptions -fasynchronous-unwind-tables -g -O2    -m32 -module -version-info 0:0:0 -no-undefined -m32 -o libgjsmdssi.la -rpath /usr/lib/../lib32/gcj-4.4.4-10 -module -version-info 0:0:0 -no-undefined -avoid-version gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider.lo gnu_javax_sound_midi_dssi_DSSISynthesizer.lo ../../../native/jni/classpath/jcl.lo -ljack 
libtool: link: /var/tmp/cross/i686-pc-mingw32/portage/cross-i686-pc-mingw32/gcc-4.4.4-r1/work/gcc-4.4.4/host-x86_64-unknown-linux-gnu/gcc/xgcc -B/var/tmp/cross/i686-pc-mingw32/portage/cross-i686-pc-mingw32/gcc-4.4.4-r1/work/gcc-4.4.4/host-x86_64-unknown-linux-gnu/gcc/ -B/usr/x86_64-unknown-linux-gnu/bin/ -B/usr/x86_64-unknown-linux-gnu/lib/ -isystem /usr/x86_64-unknown-linux-gnu/include -isystem /usr/x86_64-unknown-linux-gnu/sys-include  -m32 -shared  .libs/gnu_javax_sound_midi_dssi_DSSIMidiDeviceProvider.o .libs/gnu_javax_sound_midi_dssi_DSSISynthesizer.o ../../../native/jni/classpath/.libs/jcl.o   -ljack  -m32 -m32 -m32   -Wl,-soname -Wl,libgjsmdssi.so -o .libs/libgjsmdssi.so
/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.4/../../../../x86_64-pc-linux-gnu/bin/ld: skipping incompatible /usr/lib/libjack.so when searching for -ljack
/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.4/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -ljack
collect2: ld returned 1 exit status
make[8]: *** [libgjsmdssi.la] Ошибка 1
Внимание вопрос: Зачем gcc нужен jack?
Ставил jack, даже с флагом lib32 из оверлэя «multilib» - не помогает. Такое ощущение, что на переменную USE оно не реагирует, пробовал "-gcj -java -jack".
Никто не сталкивался?

Ответ на: комментарий от Deleted

Проверил grep'ом - нет его ни в env, ни в emerge --info. Сейчас пробую собрать более старую версию GCC. Да, и на MAKEOPTS ему тоже начихать - все в один поток собирает. Может есть какой волшебный оверлэй с mingw32?

Rupricht ★★
() автор топика
Ответ на: комментарий от Rupricht

Не вышло. Похоже crossdev окружение для сборки из астрала берет, сейчас подредактировал файлы в /usr/share/crossdev и судя по логам, ничего не изменилось.

Rupricht ★★
() автор топика
Ответ на: комментарий от Deleted

crossdev, по-моему, делает для сборки свой отдельный профиль portage, где-то в /usr/mingw32/etc/portage/ или где указано было при запуске crossdev. Можно ещё там поискать.

Потом, crossdev делает свой локальный оверлей с симлинками вида cross-mingw32/{gcc,binutils,win32api} , симлинки указывают на версии в /usr/portage, но иногда могут сбиться и указывать куда-то не туда.

anonymous
()

gcj, то есть Java компилятор тебе сильно нужен? Попробуй собрать без него. Запускай вручную скрипт crossdev -t i686-pc-mingw32 --stage=... , по отдельным stage. (По отдельным Stage он собирает отдельно crippled c компилятор, потом полноценный c/c++/java/whatever, ещё есть какой-то флаг в crossdev). Проверяй use флаги для cross-686-pc-mingw32/gcc, sys-devel/gcc, чтобы не было java, что-то вроде -* cxx ... . Проверь /usr/mingw32/etc/make.conf на предмет глобальных USE. Попробуй emerge --debug -v =cross-86-pc-mingw32/gcc-4.4.4-r1, посмотри начало логов, откуда он берёт USE-флаги.

anonymous
()
Ответ на: комментарий от UserUnknown

> /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.4/../../../../x86_64-pc-linux-gnu/bin/ld: skipping incompatible /usr/lib/libjack.so when searching for -ljack

/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.4/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -ljack

co

то есть, линуксовый ELF libjack.so ему не годится. А если ему собрать виндовый libjack.so? Собрать stage1, только gcc с си компилятором, без C++/java. Собрать win32api, headers. Собрать jack mingw32 компилятором (чем-то вроде emerge-i686-pc-mingw32). Собрать нормальный gcc (c/c++/java).

anonymous
()
Ответ на: комментарий от anonymous

Да, смотрел уже. Дефолтный профиль был симлинк на /usr/portage/profile/embedded, поменял на default, но ничего не изменилось. В самих профилях тоже смотрел, поставил в USE флагах "-jack -java -gcj" и нифига.

Rupricht ★★
() автор топика
Ответ на: комментарий от anonymous

Смотрел в:
/etc/make.conf
/etc/portage/
/usr/share/crossdev/
Везде в USE прописал "-gcj -java -jack". Ошибка и происходит на stage1, когда вообще не должно быть ни джав, ни джеков.

Rupricht ★★
() автор топика
Ответ на: комментарий от Rupricht

> Ошибка и происходит на stage1, когда вообще не должно быть ни джав, ни джеков.

Это странно. Обнови crossdev?

У меня crossdev работал так: добавлял в /etc/portage/package.use строчку вида «cross-i686-pc-mingw32/gcc ... c nocxx nojava ...» собирал, потом заменял её на ".../gcc c -nocxx ..." и опять пересобирал.

Может, что-то там левое осталось во флагах? Paludis вот понимает флаги вида -* c nocxx, -* означает «отменить все use-флаги».

anonymous
()
Ответ на: комментарий от anonymous

Обновлял и даунгрэйдил, сейчас стоит -999999. А файл в /etc/portage/package.use он сам создает. Сейчас там:

cross-i686-pc-mingw32/binutils -selinux
cross-i686-pc-mingw32/w32api -selinux
cross-i686-pc-mingw32/mingw-runtime -selinux
cross-i686-pc-mingw32/gcc -selinux -boundschecking -d -gtk -gcj -libffi -mudflap  -objc -objc++ -objc-gc -fortran nocxx -openmp

Rupricht ★★
() автор топика
Ответ на: комментарий от anonymous

Еще нет. Он больше часа компилит, и всегда в один поток, хотя в профиле прописал MAKEOPTS="-j3" и в /etc/make.conf тоже.

Rupricht ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.