如何将静态库链接到Eclipse中的yocto autotools项目

时间:2016-04-06 15:54:05

标签: eclipse static-libraries autotools yocto

我在Yocto autotools中创建了一个Eclipse项目(基于Hello World项目)。

我想将我的代码分成多个库,然后以静态库(.a)的形式将它们链接到我的项目。

现在我有一个应用程序和一些静态库。但是,无论我尝试什么,我都无法编译代码。每个单独的lib都会编译并生成.a文件,但我的应用程序不会。

搜索网络后,我有一个可能的解决方案 - 添加一个直接链接到我的静态库:

MyApp_CPPFLAGS="-I$LOCATION"
MyApp_LDADD="/home/xxx/workspace/MyApp/Encoding2/Debug/libEncoding2.a"

这是我的Makefile.am文件,其中libEncoding2.a存在于该路径中。

我得到的错误是:

make[2]: *** No rule to make target `"/home/xxx/workspace/MyApp/Encoding2/Debug/libEncoding2.a"', needed by `MyApp'.  Stop.

我已经构建了lib,所以我不确定为什么甚至需要make try。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

根据您是否使用libtool,您应分别拥有noinst_LTLIBRARIESnoinst_LIBRARIES目标列表。这应该只包含您的库的名称(libEncoding2.lalibEncoding2.a。)

你永远不应该使用完整路径,你应该引用Make变量,所以你要找的是

MyApp_CPPFLAGS = -I$LOCATION
MyApp_LDADD = libEncoding2.la  # or .a

那会有效。

但另一方面,您似乎应该花一些时间来了解autotools的工作原理,因为它可能不是您正在寻找的。有了一点点盐,你可以把我的Autotools Mythbuster作为起点。

答案 1 :(得分:0)

因为您在配方中使用静态库,所以可以使用以下命令链接到静态库,在项目源文件夹中创建指向库的软链接,即hello-world-0.1

ln -s /home/xxx/workspace/MyApp/Encoding2/Debug/libEncoding2.a

然后编辑你的bb文件hello-world_0.1.bb,添加你的URL的源路径

SRC_URI = " \
  file://libEncoding2.a \
  file://hello-world.c \
"

并在do_compile块中,使用follow命令编译项目

do_compile() {
  ${CC} hello-world.c libEncoding.a -o hello-world
}

do_install() {
   install -d ${D}${bindir}/Hello
   install -m 0755 enet ${D}${bindir}/Hello
}

点燃你的项目之后

bitbake hello-world

并运行mkefidisk.sh,您可以在hello-world中找到/usr/bin/Hello/hello-world。希望这个提示可以帮到你。

顺便说一下,我不熟悉autotools,我只是用make来咬食谱。你的静态库也应该在Yocto中创建,而不是在Eclipse中创建。所以我认为你的静态库的路径可能不正确,它应该位于~/yocto/build/tmp/...或类似的地方。在我的情况下,它位于ln -s ~/yocto/build/tmp/sysroots/intel-corei7-64/usr/lib/libEncoding.a取决于您的目标环境。