Yocto: библиотека с закрытым исходным кодом с отдельными пакетами для библиотеки и заголовка

#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 = ""
  

c.f. https://wiki .yoctoproject.org/wiki/TipsAndTricks/Packaging_Prebuilt_Libraries#Non-versioned_Libraries

Комментарии:

1. Спасибо за помощь @qschulz . Мы должны поддерживать обратную совместимость для проектов, которые ранее были связаны с библиотеками без версий.