#embedded-linux #yocto #bitbake
#встроенный-linux #yocto #bitbake
Вопрос:
У меня есть свой собственный .итак, закрытая библиотека с исходным кодом и предоставьте файл заголовка. Мой файл библиотеки .so должен находиться внутри образа yocto, но файл заголовка должен использоваться только при компиляции других проектов.
Вот квитанция yocto:
SUMMARY = "foo library"
LICENSE = "CLOSED"
SECTION = "libs"
SRC_URI = "file://usr/lib/libfoo.so
file://usr/include/foo.h "
S = "${WORKDIR}"
inherit autotools pkgconfig
do_compile() {
}
do_install() {
install -d ${D}/usr/lib
install -m 0755 ${WORKDIR}/usr/lib/libfoo.so ${D}/usr/lib/libfoo.so.1
ln -s /usr/lib/libfoo.so.1 ${D}/usr/lib/libfoo.so
install -d ${D}/usr/include
install -m 0644 ${WORKDIR}/usr/include/foo.h ${D}/usr/include/
}
FILES_${PN}-dev = "${includedir} "
FILES_${PN} = "/usr/lib/libfoo.so
/usr/lib/libfoo.so.1"
PROVIDES = "libfoo"
Я ожидаю, что пакет ${PN} имеет libfoo.so а пакет libfoo.so.1 и ${PN}-dev содержит только один заголовочный файл. Но yocto bitbake копирует только libfoo.so.1 в $ {PN} и libfoo.so находится в пакете ${PN}-dev.
Не могли бы вы помочь мне, как переместить файл so в пакет ${PN}?
Ответ №1:
Поведение здесь правильное. Неверсионные файлы .so устанавливаются в пакет -dev, потому что пакеты в системе должны связываться с версионными файлами.
Довольно редко требуется устанавливать пакет -dev в образ, поэтому эффективно, только ваш версионный файл so сделает это.
Как вы уже видели, заголовок находится в пакете -dev, поэтому он не попадет в изображение, за исключением случаев, когда пакет -dev явно добавлен к изображению.
Поскольку ваш файл заголовка находится в includedir
одном из каталогов, используемых для системного корня других рецептов (c.f. SYSROOT_DIRS
), он будет доступен для других рецептов во время сборки. То же самое для вашей библиотеки, в которой она установлена lib_dir
(также в вышеупомянутой переменной).
Итак, текущее поведение ожидается. Неясно, почему именно вы хотите, чтобы ваша неверсионная символическая ссылка также была в основном пакете.
Если по какой-то причине это действительно то, что вы хотите сделать, вам просто нужно добавить следующее в свой рецепт:
SOLIBS = ".so"
FILES_SOLIBSDEV = ""
Комментарии:
1. Спасибо за помощь @qschulz . Мы должны поддерживать обратную совместимость для проектов, которые ранее были связаны с библиотеками без версий.