Каталог установки целевой библиотеки кросс-компилятора GCC

Я строю кросс-компилятор GCC 5.2.0 со следующими ./configure команда:

../gcc-5.2.0/configure --prefix=/usr --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --target=x86_64-myos-linux-gnu --disable-nls --enable-languages=c,c++ --with-sysroot=/myos --with-native-system-header-dir=/include

Таким образом, платформа сборки и хоста x86_64-unknown-linux-gnu и целевая платформа x86_64-myos-linux-gnu,

В среде сборки у меня есть каталог /myos (подкаталог /), которая содержит корневую файловую систему для целевой платформы.

Из того, что я понимаю, процедура сборки GCC происходит в два основных этапа: первый этап, на котором цепочка инструментов в среде сборки используется для создания исполняемых файлов GCC и т. П., И второй этап, на котором только что созданные исполняемые файлы используются для создания различных " целевые библиотеки ", такие как libgcc а также libstdc++,

Так после make а также make DESTDIR=... install, Я имею:

usr/
usr/bin/
usr/include/
usr/lib/
usr/libexec/
usr/share/
usr/x86_64-myos-linux-gnu/

И из того, что я понимаю, usr/x86_64-myos-linux-gnu/ содержит файлы, которые предназначены для размещения в файловой системе целевой платформы (например, .so файлы libgcc а также libstdc++), однако есть несколько проблем:

1) просто делая make install, usr/x86_64-myos-linux-gnu/ не будет помещен в мой целевой каталог /myos,
2) если я mv usr/x86_64-myos-linux-gnu/ каталог, он не будет соответствовать целевой библиотеке .la файлы. Например, файл usr/x86_64-myos-linux-gnu/lib64/libtsan.la содержит строку:
dependency_libs=' -lpthread -ldl '/usr/x86_64-myos-linux-gnu/lib/../lib64/'/libstdc++.la -lm'
который выражает абсолютный путь к libstdc++, но просто не будет там, если я нагло mv usr/x86_64-myos-linux-gnu/ каталог.

Ни на верхнем уровне ./configure --help ни установочные документы GCC, кажется, не указывают каким-либо образом изменить путь usr/x86_64-myos-linux-gnu/ каталог. Есть идеи?

1 ответ

И насколько я понимаю, usr/x86_64-myos-linux-gnu/ содержит файлы, которые должны быть помещены в файловую систему целевой платформы.

Нет, вы создали кросс-компилятор, поэтому установленные файлы предназначены для размещения на платформе хоста, а не на цели.

1) просто выполнив команду make install, usr/x86_64-myos-linux-gnu/ не будет помещен в мой целевой каталог /myos.

Правильный. Файлы находятся в дереве установки GCC, а не в системном корне. Таким образом, они все равно будут найдены кросс-компилятором, поэтому все по-прежнему работает.

Как правило, sysroot (в вашем случае /myos) на самом деле не будет корневой файловой системой цели, это будет копия тех же файлов, что установлены на целевой машине, поэтому установка библиотек GCC в этот системный корень не очень поможет, поскольку они не появятся в целевой системе.

Если вы хотите, чтобы эти библиотеки находились в целевой папке, вам нужно установить их там самостоятельно.

Другие вопросы по тегам