Yocto:BUILD\u LDFLAGS设置为生成系统库,而不是目标库

Yocto:BUILD\u LDFLAGS设置为生成系统库,而不是目标库,yocto,bitbake,Yocto,Bitbake,我有一个makefile配方,可以构建一个共享库(一个alsa插件)。如果我在外面建库,如果yocto一切正常,alsa将链接到库 然而,如果我使用yocto构建它,即使日志没有错误,当我尝试运行alsa时,我会得到一个错误“无法打开共享库”。库已安装在错误消息引用的位置,其权限正确 在配方中,如果我打印出BUILD_LDFLAGS设置为什么,我会注意到它指向的是x86_64-linux(构建系统)库,而不是“机器”库(例如:-L//.BUILD yocto/tmp/sysroot/x86_64

我有一个makefile配方,可以构建一个共享库(一个alsa插件)。如果我在外面建库,如果yocto一切正常,alsa将链接到库

然而,如果我使用yocto构建它,即使日志没有错误,当我尝试运行alsa时,我会得到一个错误“无法打开共享库”。库已安装在错误消息引用的位置,其权限正确

在配方中,如果我打印出BUILD_LDFLAGS设置为什么,我会注意到它指向的是x86_64-linux(构建系统)库,而不是“机器”库(例如:-L//.BUILD yocto/tmp/sysroot/x86_64-linux/lib)

我的问题是:

构建标志是我的问题的根源吗

如果是,我该如何补救

如果不构建LDFLAGS,是否知道问题出在哪里

这是我的配方bb文件的副本:

SUMMARY = "..."
LICENSE = "CLOSED"

#Package release number 
PR = "r0"


###################################################################
#The following lines tell yocto where to get the source code from
#  This section is for git.  Comment out ALL this section if
#  you DO NOT want to pull from a git repo (local or remote).
#  If pulling from git uncomment and modify paths.
###################################################################
#Uncomment following line to pull from REMOTE git repo
#SRC_URI = "git://gitpath;protocol=ssh;branch=master"

#Uncomment following line and modify path to pull from LOCAL git repo clone
##SRC_URI = "git:///localgitpath;protocol=file;branch=master"

#Change hash to match the commit you want yocto to use
##SRCREV="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
##S = "${WORKDIR}/git/"

#  End of git section


###################################################################
#The following lines tell yocto where to use a local file system
# for the source.  Uncomment all lines and modify paths
###################################################################
SRC_URI = ""
inherit externalsrc
EXTERNALSRC = "/home/<my_path>"
EXTERNALSRC_BUILD = "/home/<my_path>"

#  End of local file system section

##################################################################
#END of where to get source code
##################################################################




#Ignore vendor ldflags checking and use ours
INSANE_SKIP_${PN} = "ldflags"

#Don't strip debug symbols
INHIBIT_PACKAGE_STRIP = "1" 
INHIBIT_SYSROOT_STRIP = "1" 

SOLIBS = ".so"

#Tell yocto that the .so files are real and not sym-links.
FILES_SOLIBSDEV = ""


#/usr/lib/alsa-lib
FILES_${PN} += "${libdir}/alsa-lib" 
#/usr/<PATH>
FILES_${PN} += "${prefix}/<PATH>" 

DEPENDS += "alsa-lib"

EXTRA_OEMAKE += "'CC=${CC}' 'RANLIB=${RANLIB}' 'AR=${AR}' 'CFLAGS=${CFLAGS} -I${S}/include' 'BUILDDIR=${S}' 'DESTDIR=${D}'"

TARGET_CFLAGS += "-DPIC -fPIC -Wall -Wextra -O2 -g -I./include -I<path> -I-I<path2> -I<path3> -lasound"
TARGET_LDFLAGS += "-shared -lasound"

do_configure() {
   oe_runmake -f Makefile.yocto clean
}

do_compile() {
#   unset LDFLAGS TARGET_LDFLAGS BUILD_LDFLAGS
   echo "                                   Werkdir ${WORKDIR}"
   echo "                                   Compiler ${CC}"
   echo "                                   BUILD_LDFLAGS ${BUILD_LDFLAGS}"
   echo "                                   LDFLAGS ${LDFLAGS}"
   echo "                                   TARGET_LDFLAGS ${TARGET_LDFLAGS}"
  oe_runmake -f Makefile.yocto all 'CC=${CC}'
}



do_install() {
   install -d ${D}${libdir}
   install -d ${D}${libdir}/alsa-lib
   install -d ${D}${bindir}
   install -d ${D}${prefix}
   install -d ${D}${prefix}/<PATH>
   install -m 0644 <path_n>lib1.so ${D}${libdir}
   install -m 0644 <path_n>lib2.so.so ${D}${libdir}
   install -m 0644 <path_n>lib3.so.so ${D}${libdir}
   install -m 0644 <path_n>lib4.so.so ${D}${libdir}
   install -m 0644 <path_n>lib1pcm_plugin.so ${D}${libdir}/alsa-lib
   install -m 0755 <path_n>app1 ${D}${bindir}
   install -m 0755 <path_n>app2 ${D}${bindir}
   install -m 0755 <path_n>app3 ${D}${bindir}
   install -m 0755 <path_n>app4 ${D}${bindir}
   install -m 0755 <path_n>app5 ${D}${bindir}
   install -m 0755 <path_n>app6 ${D}${bindir}
   install -m 0755 <path_n>app7 ${D}${bindir}
   install -m 0755 <path_n>app8 ${D}${bindir}

}
SUMMARY=“…”
LICENSE=“已关闭”
#包裹发行编号
PR=“r0”
###################################################################
#下面几行告诉yocto从哪里获取源代码
#本节适用于git。如果需要,请将本节全部注释掉
#您不希望从git回购(本地或远程)中提取。
#如果从git中提取,请取消注释并修改路径。
###################################################################
#取消对以下行的注释以从远程git回购中提取
#SRC_URI=”git://gitpath;协议=ssh;分支=主”
#取消对以下行的注释并修改路径以从本地git repo克隆中提取
##SRC_URI=”git:///localgitpath;协议=文件;分支=主”
#更改哈希以匹配您希望yocto使用的提交
##SRCREV=“xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”
##S=“${WORKDIR}/git/”
#git段结束
###################################################################
#下面几行告诉yocto在哪里使用本地文件系统
#对于源。取消注释所有行并修改路径
###################################################################
SRC_URI=“”
继承外部src
EXTERNALSRC=“/home/”
EXTERNALSRC_BUILD=“/home/”
#本地文件系统部分结束
##################################################################
#获取源代码的位置结束
##################################################################
#忽略供应商ldflags检查并使用我们的
疯狂_SKIP_${PN}=“ldflags”
#不要去掉调试符号
禁止包装带=“1”
禁止\u SYSROOT\u STRIP=“1”
SOLIBS=“.so”
#告诉yocto.so文件是真实的,而不是符号链接。
文件\u SOLIBSDEV=“”
#/usr/lib/alsa lib
文件${PN}+=“${libdir}/alsa lib”
#/usr/
文件${PN}+=“${prefix}/”
依赖+=“alsa库”
EXTRA_OEMAKE+=“'CC=${CC}'”RANLIB=${RANLIB}''AR=${AR}''CFLAGS=${CFLAGS}-I${S}/包括''BUILDDIR=${S}''DESTDIR=${D}'
目标?=“DPIC-fPIC-Wall-Wextra-O2-g-I./包括-I-I-I-I-I-LASOND”
目标\u LDFLAGS+=“-共享-激光声音”
是否配置(){
oe_runmake-f Makefile.yocto清除
}
你要编译吗{
#取消设置LDFLAGS目标\u LDFLAGS生成\u LDFLAGS
echo“Werkdir${WORKDIR}”
echo“编译器${CC}”
echo“BUILD\u LDFLAGS${BUILD\u LDFLAGS}”
回显“LDFLAGS${LDFLAGS}”
回显“TARGET_LDFLAGS${TARGET_LDFLAGS}”
oe_runmake-f Makefile.yocto all'CC=${CC}
}
安装吗{
安装-d${d}${libdir}
安装-d${d}${libdir}/alsa lib
安装-d${d}${bindir}
安装-d${d}${prefix}
安装-d${d}${prefix}/
安装-m 0644 lib1.so${D}${libdir}
安装-m 0644 lib2.so.so${D}${libdir}
安装-m 0644 lib3.so.so${D}${libdir}
安装-m 0644 lib4.so.so${D}${libdir}
安装-m 0644 lib1pcm_plugin.so${D}${libdir}/alsa lib
安装-m 0755 app1${D}${bindir}
安装-m 0755 app2${D}${bindir}
安装-m 0755 app3${D}${bindir}
安装-m 0755 app4${D}${bindir}
安装-m 0755 app5${D}${bindir}
安装-m 0755 app6${D}${bindir}
安装-m 0755 app7${D}${bindir}
安装-m 0755 app8${D}${bindir}
}
生成文件:

# Makefile template for shared library

#Yocto will pass in the CC flag so this is commented out.  Otherwise the correct compiler won't be used
#CC = gcc # C compiler

#These are here to allow a build outside of Yocto (testing the build).  Yocto's CFLAGS
#and LDFLAGS will override these.
CFLAGS += -fPIC -Wall -Wextra -O2 -g -I<path1> -I<path2> -I<path2> # C flags
LDFLAGS = -shared  # linking flags

RM = rm -f  # rm command
TARGET_LIB = libasoundplugin.so # target lib


LIB1=lib1
PATH1=<path1>
LIB2=lib2
PATH2=<path2>

INCLUDE_FLAGS = -L$(PATH1) -l$(LIB1I) \
                -L$(PATH2) -l$(LIB2) \
                -lasound

SRCS = source.c


OBJS = $(SRCS:.c=.o)

.PHONY: all
all: ${TARGET_LIB}

$(TARGET_LIB): $(OBJS)
        $(CC) ${LDFLAGS} ${INCLUDE_FLAGS} -o $@ $^

$(SRCS:.c=.d):%.d:%.c
        $(CC) $(CFLAGS) -MM $< >$@

include $(SRCS:.c=.d)

.PHONY: clean
clean:
    -${RM} ${TARGET_LIB} ${OBJS} $(SRCS:.c=.d)
#共享库的Makefile模板
#Yocto将传入CC标志,因此这将被注释掉。否则将不会使用正确的编译器
#CC=gcc#C编译器
#这里允许在Yocto之外进行构建(测试构建)
#LDFLAGS将覆盖这些。
CFLAGS+=-fPIC-Wall-Wextra-O2-g-I-I-I#C标志
LDFLAGS=-共享#链接标志
RM=RM-f#RM命令
TARGET_LIB=libasoundplugin.so#TARGET LIB
LIB1=LIB1
路径1=
LIB2=LIB2
路径2=
INCLUDE_FLAGS=-L$(路径1)-L$(LIB1I)\
-L$(路径2)-L$(LIB2)\
-拉森
SRCS=source.c
OBJS=$(SRCS:.c=.o)
冒牌货:全部
全部:${TARGET_LIB}
$(目标库):$(对象库)
$(CC)${LDFLAGS}${INCLUDE_FLAGS}-o$@$^
$(SRCS:.c=.d):%.d:%.c
$(CC)$(CFLAGS)-MM$<>$@
包括$(SRCS:.c=.d)
.假冒:干净
清洁:
-${RM}${TARGET_LIB}${OBJS}$(SRCS:.c=.d)
谢谢

构建标志是我的问题的根源吗

否。在生成目标包时,BUILD_LDFLAGS用于生成本机包。在您的情况下,target_LDFLAGS变量将用作

这是我的配方bb文件的副本

它来自哪里?你是用模板写的吗? 正如我所看到的,有一个配方,也许你可以添加你的插件到这个配方? 你也可以拿菜谱为例,据我所知,它与你正在尝试做的很接近。它没有什么特别的功能,除了设置依赖项、获取源、添加某些ld标志以及将结果文件传递到包中

关于Makefile(我想这也是您的配方):

首先,yocto不需要单独的Makefile

#Yocto will pass in the CC flag so this is commented out.  Otherwise the correct compiler won't be used
#CC = gcc # C compiler
你正在从你的.bb配方中传递CC(甚至两次:通过EXTRA_OEMAKE和in do_compile)