2016-04-06 76 views
0

我在Eclipse(基於Hello World項目)中創建了Yocto autotools項目。如何將一個靜態lib鏈接到Eclipse中的yocto autotools項目

我想將我的代碼分離成多個庫,然後將它們以靜態庫(.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,所以我不知道爲什麼,甚至需要一個補充嘗試。

任何幫助將不勝感激。

回答

0

根據您是否使用libtool,您應該分別有noinst_LTLIBRARIESnoinst_LIBRARIES目標列表。這應該只包括你的庫的名稱(libEncoding2.lalibEncoding2.a。)

你不應該使用這個完整的路徑,你應該報價讓變量,所以你要找的是

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

而且這將工作。

但另一方面,似乎您應該花一些時間來了解自動工具的工作方式,因爲它可能不是您想要的。隨着一粒鹽,你可以把我的Autotools Mythbuster作爲一個起點。

0

因爲你在你的食譜使用靜態庫,你可以做一個軟鏈接庫項目源文件夾中,即,你好世界-0.1,使用下面的命令來鏈接到您的靜態庫

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

然後編輯你的BB文件,hello-world_0.1.bb,添加源路徑您的網址

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

,並在do_compile塊,使用如下命令編譯項目

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的項目

bitbake hello-world 

和運行mkefidisk.sh,你可以找到在/usr/bin/Hello/hello-worldhello-world。希望這個提示可以幫助你。

順便說一句,我不熟悉autotools,我只是使用make來bitbake食譜。我想你的靜態庫也應該在Yocto中創建,而不是在Eclipse中。所以我認爲你的靜態庫的路徑可能不正確,它應該位於~/yocto/build/tmp/...或某些類似的地方。就我而言,它位於ln -s ~/yocto/build/tmp/sysroots/intel-corei7-64/usr/lib/libEncoding.a,取決於您的目標環境。

相關問題