在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
鏈接正確完成