Каталог установки целевой библиотеки кросс-компилятора 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 в этот системный корень не очень поможет, поскольку они не появятся в целевой системе.
Если вы хотите, чтобы эти библиотеки находились в целевой папке, вам нужно установить их там самостоятельно.