LINUX.ORG.RU

Кросс-компиляция C/C++ под Solaris

 , , , ,


1

1

Собственно, сабж.

Ни разу не занимался кросс-компиляцией, может кто-нибудь подсказать, что и как стоит делать?

Есть SunOS, хочу собирать приложения на C и C++(11) под неё из-под линукса, там только gcc 3.4.3, который в одиннадцатые плюсы не умеет и поставить свой возможности нет. Собирать gcc там в домашнем каталоге не хочется. Чем собирать под линуксом не важно, gcc или clang.

uname -a
SunOS sun 5.10 Generic_150401-13 i86pc i386 i86pc

libstdc++ надо новый тащить в соляру для новых плюсов.

Вот ссылки: https://gcc.gnu.org/onlinedocs/gccint/Configure-Terms.html https://gcc.gnu.org/install/specific.html#x86-64-x-solaris210

If build and host are the same, the GCC you are building will also be used to build the target libraries (like libstdc++). If build and host are different, you must have already built and installed a cross compiler that will be used to build the target libraries (if you configured with --target=foo-bar, this compiler will be called foo-bar-gcc).

In the case of target libraries, the machine you're building for is the machine you specified with --target. So, build is the machine you're building on (no change there), host is the machine you're building for (the target libraries are built for the target, so host is the target you specified), and target doesn't apply (because you're not building a compiler, you're building libraries). The configure/make process will adjust these variables as needed. It also sets $with_cross_host to the original --host value in case you need it.

SZT ★★★★★ ()
Последнее исправление: SZT (всего исправлений: 1)

Для соляры я не делал, но делал кросс linux -> freebsd (а также windows -> freebsd). Для clang общие шаги такие:

* Собираем clang/llvm, libc++, libc++abi, compiler-rt с указанием default target triple (не знаю, какой он у тебя для соляры, для фряхи он выглядит примерно так: x86_64-pc-freebsd10.2)

* Забираем с таргет системы системные инклюды и нужный рантайм (для фряхи это весь /usr/include +

usr/lib/crtend.o
usr/lib/crti.o
usr/lib/crt1.o
usr/lib/crtbegin.o
usr/lib/crtbeginT.o
usr/lib/crtn.o
usr/lib/crtendS.o
usr/lib/crtbeginS.o

* Собираем кроссом binutils

* Собираем нужные библиотеки

Получившимся тулчейном компиляем нужный тебе софт.

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

В общем вроде бы понятно.
По поводу шага с библиотеками (пример SZT выше) — их тогда кладу куда-нибудь и делаю export LD_LIBRARY_PATH=…, так?

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

Собираем кроссом binutils

Очепятался, binutils ты собираешь нативным компилятором, но таргет надо указать тот, который тебе нужен (опция --target у configure).

DELIRIUM ☆☆☆☆☆ ()
Ответ на: комментарий от evilface

Схема сборки одна и та же. Нужно будет просто в опциях сборки архитектуру и платформу соответствующую задать. Ну и возможны глюки, специфичные для данной комбинации, но от этого уже никуда не уедешь.

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