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

如何将静态库链接到Eclipse中的YoctoAutotools项目,eclipse,static-libraries,autotools,yocto,Eclipse,Static Libraries,Autotools,Yocto,我在Eclipse中创建了一个yoctoautotools项目(基于helloworld项目) 我想将我的代码分成若干个lib,然后以静态libs(.a)的形式将它们链接到我的项目 现在我有一个应用程序和一些静态库。然而,无论我尝试什么,我都无法编译我的代码。每个独立的库编译并生成一个.a文件,但我的应用程序没有 搜索web后,我有了一个可能的解决方案-添加到我的静态库的直接链接: MyApp_CPPFLAGS="-I$LOCATION" MyApp_LDADD="/home/xxx/works

我在
Eclipse
中创建了一个
yoctoautotools
项目(基于
helloworld
项目)

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

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

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

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,所以我不确定为什么需要进行一次尝试


任何帮助都将不胜感激。

根据您是否使用
libtool
,您应该分别拥有
noinst\u库
noinst\u库
目标列表。这应该只包括库的名称(
libEncoding2.la
libEncoding2.a

您永远不应该为此使用完整路径,也不应该引用Make变量,因此您要查找的是

MyApp_CPPFLAGS = -I$LOCATION
MyApp_LDADD = libEncoding2.la  # or .a
那就行了


但另一方面,您似乎应该花一些时间来了解自动工具是如何工作的,因为它可能不是您想要的。你可以把my作为一个起点。

因为你在食谱中使用静态库,你可以在你的项目源文件夹中创建一个到库的软链接,即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
,您可以在
/usr/bin/hello/hello world
中找到
hello world
。希望这个提示能对你有所帮助

顺便说一句,我不熟悉自动工具,我只是用make来烘焙食谱。您的静态库也应该在Yocto中创建,而不是在Eclipse中创建。因此,我认为静态库的路径可能不正确,它应该位于
~/yocto/build/tmp/…
或类似的位置。在我的例子中,它位于
ln-s~/yocto/build/tmp/sysroot/intel-corei7-64/usr/lib/libEncoding中。a
取决于您的目标环境