Yocto + библиотека автоинструментов + приложение CMake = ошибка компоновщика - PullRequest
0 голосов
/ 30 августа 2018

У меня есть Yocto BSP со своим собственным слоем, который включает в себя autotools 3-ю библиотеку деталей ( libcoap ). Файл моего приложения ".bb" имеет следующие строки: libcoap необходимо:

DEPENDS += "libcoap"
RDEPENDDS_${PN} += " libcoap libcoap-dev libcoap-devstatic"

Я вижу, что файлы библиотеки копируются в sysroot:

$ ls -l /projects/oe-core/build/tmp-glibc/work/armv7at2hf-neon-angstrom-linux-gnueabi/coap-playground/1.0-r0/recipe-sysroot/usr/lib/libcoap*
-rw-r--r-- 2 udev udev 286430 Ago 21 13:53 /projects/oe-core/build/tmp-glibc/work/armv7at2hf-neon-angstrom-linux-gnueabi/coap-playground/1.0-r0/recipe-sysroot/usr/lib/libcoap.a
lrwxrwxrwx 1 udev udev    173 Ago 29 14:33 /projects/oe-core/build/tmp-glibc/work/armv7at2hf-neon-angstrom-linux-gnueabi/coap-playground/1.0-r0/recipe-sysroot/usr/lib/libcoap.so -> ../../projects/oe-core/build/tmp-glibc/work/armv7at2hf-neon-angstrom-linux-gnueabi/libcoap/4.1.2+gitAUTOINC+d48ab449fd-r0/image/usr/lib/libcoap.so.4.1.2
-rwxr-xr-x 2 udev udev  38444 Ago 21 13:53 /projects/oe-core/build/tmp-glibc/work/armv7at2hf-neon-angstrom-linux-gnueabi/coap-playground/1.0-r0/recipe-sysroot/usr/lib/libcoap.so.4.1.2

Нетрудно заметить, что символическая ссылка немного странная:

/projects/oe-core/build/tmp-glibc/work/armv7at2hf-neon-angstrom-linux-gnueabi/coap-playground/1.0-r0/recipe-sysroot/usr/lib/libcoap.so -> ../../projects/oe-core/build/tmp-glibc/work/armv7at2hf-neon-angstrom-linux-gnueabi/libcoap/4.1.2+gitAUTOINC+d48ab449fd-r0/image/usr/lib/libcoap.so.4.1.2

My libcoap.bb содержит inherit relative_symlinks (в противном случае создается абсолютная ссылка на "/ projects" и происходит сбой битбейка), но созданная символическая ссылка просто добавляет "../../" к исходной ссылке.

Итак ... вопросы:

  1. Зачем мне нужно inherit relative_symlinks? Разве make install не должен создавать символическую ссылку относительно sysroot из коробки?

Сгенерировано Makefile содержит:

librootdir = $(DESTDIR)$(prefix)/lib
# ...
ln -s $(librootdir)/$(LIBSO).4.1.2 $(librootdir)/$(LIBSO)

И я думал, что $(DESTDIR) уже будет указывать на правильное место во время установки bitbake ...

  1. Каков правильный способ исправить это? Может ли быть что-то не так с другой стороны (приложение пытается установить связь с libcoap)?

Заранее спасибо.


Ресурсы

libcoap.bb основан на Интернете и довольно прост:

SUMMARY = "A C implementation of IETF Constrained Application Protocol (RFC 7252)"
DESCRIPTION = "Libcoap provides an implementation of the IETF CoAP protocol"
HOMEPAGE = "http://sourceforge.net/projects/libcoap/"
SECTION = "libs/network"

PROVIDES = "libcoap"

SRCREV = "d48ab449fd05801e574e4966023589ed7dac500b"
# Lookout for PV bump too when SRCREV is changed
PV = "4.1.2+git${SRCPV}"
LICENSE = "GPLv2 | BSD"
LIC_FILES_CHKSUM = "file://${S}/LICENSE.BSD;md5=1164f52f9c4db2c13f681b201010d518 \
                    file://${S}/LICENSE.GPL;md5=4641e94ec96f98fabc56ff9cc48be14b"

S = "${WORKDIR}/git"

SRC_URI = "git://git.code.sf.net/p/libcoap/code"

inherit autotools-brokensep relative_symlinks

EXTRA_OECONF += "--with-shared"
EXTRA_OEMAKE += "all"

INSANE_SKIP_${PN} = "ldflags"
BBCLASSEXTEND = "native nativesdk"
...