我在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。
任何帮助将不胜感激。
答案 0 :(得分:0)
根据您是否使用libtool
,您应分别拥有noinst_LTLIBRARIES
或noinst_LIBRARIES
目标列表。这应该只包含您的库的名称(libEncoding2.la
或libEncoding2.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
。希望这个提示可以帮到你。
~/yocto/build/tmp/...
或类似的地方。在我的情况下,它位于ln -s ~/yocto/build/tmp/sysroots/intel-corei7-64/usr/lib/libEncoding.a
取决于您的目标环境。