LINUX.ORG.RU

Почему autotools при кросс-компиляции пытается подхватить библиотеки с хостовой системы?

 , , ,


0

1

Пытаюсь собрать pixman. Взял кросс-тулчейн, никаких библиотек ещё не собирал.
Запускаю скрипт configure:

./configure --host=mipsel-linux --build=x86_64-pc-linux-gnu
Компилятор определяется правильно, но потом запускается pkg-config и находит библиотеки с хостовой системы:
checking for mipsel-linux-pkg-config... no
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for pixman_version_string in -lpixman-1... no
checking for posix_memalign... yes
checking for sigaction... yes
checking for alarm... yes
checking sys/mman.h usability... yes
checking sys/mman.h presence... yes
checking for sys/mman.h... yes
checking for mmap... yes
checking for mprotect... yes
checking for getpagesize... yes
checking fenv.h usability... yes
checking fenv.h presence... yes
checking for fenv.h... yes
checking for feenableexcept in -lm... yes
checking whether FE_DIVBYZERO is declared... yes
checking for gettimeofday... yes
checking sys/time.h usability... yes
checking sys/time.h presence... yes
checking for sys/time.h... yes
checking for library containing sqrtf... -lm
checking for thread local storage (TLS) support... __thread
checking for pthreads... yes
checking for __attribute__((constructor))... yes
checking for __float128... no
checking for __builtin_clz... yes
checking for GCC vector extensions... yes
checking for PNG... yes
Естественно, слинковать библиотеки с хостовой системы при кросс-компиляции невозможно, потому приходится их ручками выключать.
Я что-то неправильно делаю, да? Нужно завести mipsel-linux-pkg-config, который будет находить только нужные библиотеки?

★★★★★

я могу ошибаться в деталях, но по идее, следует указать пути к целевым include и libs через переменные окружения CFLAGS, CXXFLAGS (-I), LDFLAGS (-L), PKG_CONFIG_PATH (просто путь), и т.п.

waker ★★★★★
()

mips тут как бе непричем, вот товарищ выше тебе верно сказал. Тебе нужно окружение правильно настроить.

Вообще что за система? в убунте все настроено из коробки было и автотулсы находили правильно.

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

Так дело как раз в том, что в CFLAGS и LDFLAGS у меня пути правильные, PKG_CONFIG_PATH пустой (так как файлов *.pc ещё нигде нет). Но pkg-config всё равно первым делом подсовывает -I/usr/include/libpng12.

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

Вообще что за система? в убунте все настроено из коробки было и автотулсы находили правильно.

У меня Xenial Xerus.

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

Но pkg-config всё равно первым делом подсовывает -I/usr/include/libpng12.

если ты укажешь не пустой PKG_CONFIG_PATH, с путем в пустую директорию, например — то он не должен подсовывать системный libpng.

(если переменная PKG_CONFIG_PATH не выставлена, будет использоваться $prefix захардкоденный в твоем системном pkg-config)

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от CYB3R

хм .. странно, бля.

Отчетливо помню, что на какой-то из 14 версий собирал для мипса и даже не пискнуло.

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

Да, я сам ненавижу автотулс, но пользоваться приходится.

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

вот что нагуглилось

https://www.freedesktop.org/wiki/Software/pkg-config/CrossCompileProposal/

when $PKG_CONFIG_LIBDIR is specified, it will override the compiled in default directory (e.g. /usr/lib/pkgconfig) and the PKG_CONFIG_PATH.
Note that when specifying PKG_CONFIG_LIBDIR, pkg-config will completely ignore the content in PKG_CONFIG_PATH, even if the documentation states different things.

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от waker

Сейчас я собрал pkg-config с --target=x86_64-pc-linux-gnu --host=mipsel-linux --build=x86_64-pc-linux-gnu и вроде бы он работает, как нужно.

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

Сейчас буду постепенно собирать разные библиотеки, которые друг от друга зависят. Чтобы находить друг друга они как раз используют pkg-config, но проблема в том, что prefix, указанный при сборке, и префикс, куда они реально установлены (DESTDIR) отличаются. Потому и все файлы *.pc имеют в себе неправильные пути. Есть какой-нибудь специальный механизм у pkg-config для решения таких проблем? Или придётся что-то костылять?

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

вот, не люблю buildroot, но, может, через него попробовать всё сделать? заинсталлит всё, куда надо.

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

Тоже не люблю билдрут, но уверен, что с ним проблем не будет. Хочу сам разобраться и понять, как это работает.

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

у нас вот под это наш софт собирается в билдруте. есть и автотулзовый с пкгконфигом. полет нормальный.

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

Можно использовать уже установленный pkg-config с PKG_CONFIG_LIBDIR, указывающей в тот твой «CROSS_ROOT/usr/lib/pkgconfig», как уже сказал waker. Иначе - костыль.

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

Очень странно переменная PKG_CONFIG_LIBDIR влияет на работу pkg-config. Через раз влияет. Сейчас сделал apt purge .-dev, ничего лишнего не находит. Но думаю, что есть ещё куча всего, что может сломаться.

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