test: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=88e4142dceabd295369657b29757141f98a03753, not stripped
從控制臺(tái)的輸出可以看出,該可執(zhí)行文件運(yùn)行平臺(tái)為ARM,而不是AMD64。
3.移動(dòng)動(dòng)態(tài)鏈接庫(kù)
【移動(dòng)共享庫(kù)至目標(biāo)板/usr/lib目錄中】
通過(guò)FTP工具把共享庫(kù)傳輸至樹莓派中,然后通過(guò)cp指令復(fù)制到/usr/lib中
sudo cp libtest.so /usr/lib
linux系統(tǒng)中默認(rèn)的搜多路徑為/lib和/usr/lib,libtest.so可以復(fù)制到任何目錄中。
修改libtest.so的執(zhí)行權(quán)限。
sudo chmod 775 libtest.so
4.執(zhí)行
【FTP上傳】
通過(guò)FTP工具把可執(zhí)行文件test復(fù)制到樹莓派中,然后通過(guò)ldd指令查看共享庫(kù)鏈接狀態(tài)。
【檢驗(yàn)】
ldd test
/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so (0xb6f7f000)
libtest.so => /usr/lib/libtest.so (0xb6f6b000)
libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6e3b000)
/lib/ld-linux-armhf.so.3 (0xb6f8d000)
從控制臺(tái)的輸出可以看出,test成功鏈接了位于/usr/lib中的libtest.so
【執(zhí)行】
./test
a=3
b=2
a+b=5
a-b=1
從執(zhí)行結(jié)果看,前面所做的努力是正確的。
5.總結(jié)
回答在前言中的問(wèn)題。
【1】交叉編譯時(shí)的共享庫(kù)是否需要放置于目標(biāo)板中,如果需要放置在哪個(gè)目錄中。
交叉編譯之后的共享庫(kù)需要復(fù)制到目標(biāo)板中,最好放置于/usr/lib或/lib中,當(dāng)然也有其他的方法,在這里不詳細(xì)說(shuō)明。
【2】交叉編譯時(shí)的共享庫(kù)是否需要放置于宿主機(jī)中,如果需要放置于哪個(gè)目錄中。
交叉編譯時(shí)確切的說(shuō)鏈接過(guò)程中需要指定共享庫(kù)的問(wèn)題,通過(guò)-L指定目錄,通過(guò)-l指定共享庫(kù)名稱。但是此時(shí)交叉編譯的共享庫(kù)最好不要放置于宿主機(jī)的/lib或/usr/lib中,以免產(chǎn)生混淆。
綜合【1】和【2】,libtest.so同時(shí)存在于目標(biāo)板和宿主機(jī)中。
【3】交叉編譯時(shí)如何指定共享庫(kù)
通過(guò)-L指定目錄,通過(guò)-l指定共享庫(kù)名稱
【4】程序運(yùn)行時(shí)如何查找共享庫(kù)
最直觀的方法,復(fù)制到/usr/lib目錄中,讓linux系統(tǒng)自動(dòng)查找。
最后,發(fā)現(xiàn)博文寫多了自己感覺(jué)好累啊,希望這些總結(jié)對(duì)大家有用。