【问题标题】:undefined reference error while linking static library in bitbake recipe在 bitbake 配方中链接静态库时出现未定义的引用错误
【发布时间】:2017-07-21 19:02:00
【问题描述】:

我是 yocto 和 bitbake 的新手,我正在为自定义 imx6 板构建一个 voip 应用程序。我想使用 pjsip 库来构建我的应用程序,我在 yocto 构建中编译了 pjsip 并生成了 pjsip 库(所有 pjsip 库都是静态的)。我在为调用 pjsip 函数的应用程序构建配方时遇到问题。下面是我的食谱的样子

文件名:rttapp.bb

DESCRIPTION = "Simple voip application"
SECTION = "examples"
LICENSE = "MIT"
LIC_FILES_CHKSUM ="file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
PR = "r1"

SRC_URI += "file://rttapp.c"
SRC_URI += "file://include"
SRC_URI += "file://lib"

S = "${WORKDIR}"

CFLAGS_prepend += "-I${WORKDIR}/include -DPJ_AUTOCONF=1 -DPJ_IS_BIG_ENDIAN=0 ->DPJ_IS_LITTLE_ENDIAN=1"
LDFLAGS_append += "-L${WORKDIR}/lib -lpjsua2-arm-poky-linux-gnueabi -lstdc++ ->lpjsua-arm-poky-linux-gnueabi -lm -lrt -lpthread -lasound"

do_compile() {
${CC} ${CFLAGS} ${LDFLAGS} rttapp.c -o rttapp
}

当我执行 bitbake rttapp 时,我看到的错误如下:

/usr/src/debug/rttapp/1.0-r1/rttapp.c:159: undefined reference to pjsua_create'. collect2: error: ld returned 1 exit status

请指教

【问题讨论】:

  • 您确定应该使用 C 编译器链接到 libstd++.so 吗?此外,您没有说明您使用的是哪个版本和文档层。
  • 同意感谢您的指出,删除了 libstd++,但主要错误仍然存​​在……没想到这个更改也能解决它。

标签: yocto bitbake


【解决方案1】:

发现问题,其实是个愚蠢的错误

${CC} ${CFLAGS} ${LDFLAGS} rttapp.c -o rttapp 

应该是

${CC} rttapp.c ${CFLAGS} ${LDFLAGS} -o rttapp

【讨论】:

  • 这有什么原因吗?我从来没有想过这是一个解决方案,谢谢!
【解决方案2】:

由于您的配方依赖于pjsip,因此您需要有一个明确的依赖关系。只需添加

DEPENDS += 'pjsip' 

你的食谱。

从Pyro 版本开始,没有使用全局 sysroot。相反,所有配方都必须显式添加它们自己的所有依赖项。

【讨论】:

  • 我仍然看到同样的错误,添加 DEPENDS 没有区别
  • 好吧,在这种情况下,请验证 pjsip 配方是否实际安装了静态库和这些库的名称。
  • 可能这就是我遗漏的地方,非常感谢您帮助我的 pjsip 配方,构建和安装 .a 文件到 ${WORKDIR}/build 目录,我手动将它们复制到 files 目录在 rttapp 目录中
  • 让 pjsip 配方将头文件和库安装到 ${D} 添加通常。当您的配方依赖于 pjsip 时,应将库和头文件安装到 sysroot 中(全局的,或者对于 Pyro 及更高版本,安装到配方特定的 sysroot 中)。
  • 由于它们都是静态库,我不想将它们安装到 {D} 中,因为我不希望它们成为我图像的一部分。我只需要通过将其链接到它们来构建我的可执行文件。我们怎样才能做到这一点?
猜你喜欢
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 1970-01-01
相关资源
最近更新 更多