native包拒绝将库放在sysroot文件夹中

时间:2016-04-21 08:47:18

标签: yocto bitbake openembedded

我有一个必须为主机和目标构建的包(openssl)。它创建了一些.so.a库,其他一些包分别需要运行时和编译时间。

当我为目标编译这个包时,一切正常,每个文件都在我告诉它的地方结束,但是当我为主机(${PN}-native目标)编译时,它只是没有将库放在主机sysroot目录(./build/tmp/sysroot/x86_64-linux)中。

这是食谱:

SUMMARY = "Secure Socket Layer"
SECTION = "libs/network"
LICENSE = "openssl"
LIC_FILES_CHKSUM = "file://LICENSE;md5=4004583eb8fb7f89"

branch = "yocto"
SRC_URI = "git://www.myserver.com/openssl.git;protocol=ssh;branch=${branch}"
SRCREV = "${AUTOREV}"
S = "${WORKDIR}/git"

BBCLASSEXTEND += "native nativesdk"

# This is because I am porting this package from other project and I can't modify it.
FILES_${PN} += "${libdir}/libssl.so ${base_libdir}/libcrypto.so"
FILES_SOLIBSDEV = ""

do_compile() {
    ${MAKE}
}

do_install() {
    DESTDIR=${D} ${MAKE} install
}

有谁能让我知道我做错了什么?提前致谢

2 个答案:

答案 0 :(得分:1)

首先,为什么要编写自己的openssl配方而不是使用oe-core中的配方?

无论如何,问题在于你没有告诉食谱使用什么前缀。在本机构建中,前缀是将包正确地重定位到本机sysroot中。

答案 1 :(得分:-1)

好的,我知道问题所在:

对于本机配方,您必须使用映像文件夹中主机sysroot的完整路径来安装它。这意味着在编译目标时,图像文件夹如下所示:

$ tree -d
/openssl/1.0.0-r0/image
├── lib
└── usr
    ├── include
    │   └── openssl
    └── lib

但对于主持人来说,在我的情况下看起来像这样:

$ tree -d
openssl-native/1.0.0-r0/image
└── home
    └── xnor
        └── yocto
            └── build
                └── tmp
                    └── sysroots
                        └── x86_64-linux
                            ├── lib
                            └── usr
                                ├── include
                                │   └── openssl
                                └── lib

修改 正确的解决方案是修改Makefile以从环境中获取${prefix}${bindir}${libdir}等,而不是在Makefile中对这些路径进行硬编码。在我的情况下,由于项目要求,这是不可能的,所以我必须这样做:

SUMMARY = "Secure Socket Layer"
SECTION = "libs/network"
LICENSE = "openssl"
LIC_FILES_CHKSUM = "file://LICENSE;md5=4004583eb8fb7f89"

branch = "yocto"
SRC_URI = "git://www.myserver.com/openssl.git;protocol=ssh;branch=${branch}"
SRCREV = "${AUTOREV}"
S = "${WORKDIR}/git"

BBCLASSEXTEND += "native nativesdk"

# This is because I am porting this package from other project and I can't modify it.
FILES_${PN} += "${libdir}/libssl.so ${base_libdir}/libcrypto.so"
FILES_SOLIBSDEV = ""

do_compile() {
    ${MAKE}
}

do_install() {
    # The change is here!
    DESTDIR=${D}${base_prefix} ${MAKE} install
}

正如您所想象的那样,${base_prefix}扩展为主机(openssl-native)配方的"/home/xnor/yocto/build/tmp/sysroots/x86_64-linux/"和目标(openssl)的""