zcu102_注意_解決SDK鏈接靜態庫bug

在SDK中開發PS程序時,如果改動工程配置中的Path and Symbols中Libraires參數,則可能出現鏈接時undefined reference的錯誤

因爲添加的靜態庫失效,沒有鏈接,原因在於改動Libraries之後,gcc的鏈接指令多出一個-l指令,與SDK建立工程時默認的Libraries的指令格式不匹配,導致鏈接失敗

比如新建工程時,在工程上右鍵菜單選擇Properties,彈出的屬性窗口內打開Paths and Symbols,進入Libraries頁
在這裏插入圖片描述

可以看到默認使用-Wl添加了xil, gcc和c這3個靜態庫

如果點擊Cancel按鈕關閉窗口,Build工程時鏈接指令爲

aarch64-none-elf-gcc -Wl,-T -Wl,…/src/lscript.ld -L…/…/dadfad_bsp/psu_cortexa53_0/lib -o 「dadfad.elf」 ./src/helloworld.o ./src/platform.o -Wl,–start-group,-lxil,-lgcc,-lc,–end-group

鏈接正確,生成elf文件

如果點擊OK按鈕關閉窗口(沒有任何改動),則Build工程師鏈接指令變爲

aarch64-none-elf-gcc -L…/…/dadfad_bsp/psu_cortexa53_0/lib -Wl,-T -Wl,…/src/lscript.ld -o 「dadfad.elf」 ./src/helloworld.o ./src/platform.o -l-Wl,–start-group,-lxil,-lgcc,-lc,–end-group

錯誤提示爲

d:/xilinx/sdk/2018.2/gnu/aarch64/nt/aarch64-none/bin/…/lib/gcc/aarch64-none-elf/7.2.1/…/…/…/…/aarch64-none-elf/bin/ld.exe: cannot find -l-Wl,–start-group,-lxil,-lgcc,-lc,–end-group
collect2.exe: error: ld returned 1 exit status
make: *** [dadfad.elf] 錯誤 1

與正確的鏈接指令的差異在於在-Wl之前多出了-l,導致出現不可識別的指令,因此鏈接失敗

解決辦法:

刪除默認的Libraries配置語句,改成常規的順序添加方式,注意靜態庫之間的依賴順序
在這裏插入圖片描述

鏈接指令變爲:

aarch64-none-elf-gcc -L…/…/dadfad_bsp/psu_cortexa53_0/lib -Wl,-T -Wl,…/src/lscript.ld -o 「dadfad.elf」 ./src/helloworld.o ./src/platform.o -lc -lgcc -lxil

鏈接正確完成