linux - yocto do_patch 不适用于 native

标签 linux cross-compiling yocto bitbake

我正在尝试编写一个配方,它确实与我的补丁配合得很好,但是当我添加我的配方“继承 native ”时,它只是简单地传递我的补丁而不应用它。

首先,我想升级一个基地recipe将其文件名更改为2.8.33(此方法通常适用于其他食谱)。我在编译时遇到错误,发现错误后,我制作了一个补丁并将其添加到配方中。当我从配方中删除 native 相关行时,它已成功编译。我检查了工作目录中的代码,发现我的补丁已应用。但对于 native 编译,我看不到我的补丁应用于提取的代码。

gsoap_2.8.33.inc:

DESCRIPTION = "The gSOAP toolkit provides a unique SOAP-to-C/C++ language binding \
for the development of SOAP Web Services and clients."
SECTION = "devel"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=f195e609151c013dcfce95528e2d4c63"

SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}2/${BPN}_${PV}.zip"
SRC_URI[md5sum] = "43dade7839252500f7671f8fe6a3739c"
SRC_URI[sha256sum] = "8534a8bb82ce97544bbb60bf4410ef66f9c328abf62879e499272894019199a4"

inherit autotools


PR = "r1"

S = "${WORKDIR}/gsoap-2.8"


FILES_${PN}-dev = "${includedir}"
RRECOMMENDS_${PN}-dev = "${PN}-staticdev"

FILES_${PN}-staticdev = "${libdir}"


EXTRA_OECONF_append =" --enable-ipv6 "


EXTRA_OEMAKE = "SOAP=${STAGING_BINDIR_NATIVE}/soapcpp2"


PARALLEL_MAKE = ""

gsoap-native_2.8.33.bb(不起作用且无法修补):

inherit native
require gsoap_${PV}.inc

FILESEXTRAPATHS_append := "${THISDIR}/:"  


SRC_URI += "file://conf.patch"

PARALLEL_MAKE = ""

DEPENDS = ""
EXTRA_OEMAKE = ""

do_patch_append() {
d.setVar("TEXT", "Hello World")
print d.getVar("TEXT", True)
}

do_install() {
    oe_runmake DESTDIR=${D} BINDIR=${D}${bindir} install
}

gsoap_2.8.33.bb(在删除 gsoap-native 依赖项后可以工作并进行修补):

require gsoap_${PV}.inc
DEPENDS = "gsoap-native openssl zlib flex bison"

FILESEXTRAPATHS_append := "${THISDIR}/:"  
SRC_URI += "file://conf.patch" 

do_install_append() {
    install -d ${D}${libdir}
    for lib in libgsoapssl libgsoapssl++ libgsoap libgsoapck++ libgsoap++ libgsoapck
    do
        oe_libinstall -C gsoap $lib ${D}${libdir}
    done
}

FILES_${PN} = "${bindir}/wsdl2h ${bindir}/soapcpp2"
FILES_${PN} += "${datadir}"

我的补丁:

diff --git a/configure b/configure
index a3fade3..8708cad 100755
--- a/configure
+++ b/configure
@@ -6196,7 +6196,7 @@ $as_echo "no" >&6; }
     WSDL2H_EXTRA_FLAGS="-DWITH_OPENSSL -DWITH_GZIP"
     # an ugly hack to get httpda and smdevp plugins to conditionally
     # compile with wsdl2h when OPENSSL is available
-    WSDL2H_EXTRA_LIBS="${WSDL2H_EXTRA_LIBS} ../plugin/httpda.c ../plugin/smdevp.c ../plugin/threads.c -lssl -lcrypto -lz"
+    #WSDL2H_EXTRA_LIBS="${WSDL2H_EXTRA_LIBS} ../plugin/httpda.c ../plugin/smdevp.c ../plugin/threads.c -lssl -lcrypto -lz"
     SAMPLE_INCLUDES=
     SAMPLE_SSL_LIBS="-lssl -lcrypto -lz"
     WSDL2H_SOAP_CPP_LIB="libgsoapssl++.a"

如何使用我的补丁对我的配方进行“bitbake”以进行交叉编译?

最佳答案

您仍然没有解释到底失败的原因以及您如何检查...我测试了您的 gsoap-native 配方,在删除损坏的 do_patch_append() 函数后,它修补得很好:在 bitbake -c patch gsoap-native 之后,我可以在 gsoap-native 工作目录中看到修补后的源代码。

一些注意事项:

  • 您正在修补一个将在 do_configure 期间重新生成的文件(autotools 类将运行 autoreconf)——也许这就是您认为修补没有发生的原因。改为修改configure.ac。
  • 不需要将 native 和目标配方分开:meta-openembedded 中的原始配方已经支持构建 gsoap 和 gsoap-native。如果您需要添加补丁以使较新的版本正常工作,那么就这样做,不要开始编写新的配方。

关于linux - yocto do_patch 不适用于 native ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41378089/

相关文章:

c++ - undefined symbol : _ZL22__gthrw_pthread_cancelm error

do while 第一次后无法输入

c++ - 是否有可能让 Visual Studio 2017 将 c++ 代码编译成 exe 以外的文件类型?

ffmpeg - 如何在 yocto 中编译 ffmpeg 以获得可用的二进制文件

linux - 如何复制包含绝对符号链接(symbolic link)的文件夹并保留其相对目标

linux - 可执行文件关闭后在 bash 中执行一些命令?

yocto - 最后怎么打补丁呢?

yocto - 用于复制文件夹的 bitbake 配方,yocto 的子文件夹

ios - 链接器错误 - 尝试链接到 arm,但链接器使用 x86

gcc - crosstools-ng 找不到 pthread.so