我無法鏈接到外部庫,MY_LIB.a
。未定義的引用,儘管鏈接順序正確
以下是從mbed.org編譯器創建的makefile以及添加到MY_LIB.a
路徑的鏈接中調用的。
arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -Wl,--gc-sections --specs=nano.specs
-u _printf_float -u _scanf_float -T./mbed/TARGET_LPC1768/TOOLCHAIN_GCC_ARM/LPC1768.ld
-L./mbed/TARGET_LPC1768/TOOLCHAIN_GCC_ARM -o MyProg.elf main.o mbed/TARGET_LPC1768
/TOOLCHAIN_GCC_ARM/cmsis_nvic.o mbed/TARGET_LPC1768/TOOLCHAIN_GCC_ARM/system_LPC17xx.o
mbed/TARGET_LPC1768/TOOLCHAIN_GCC_ARM/startup_LPC17xx.o mbed/TARGET_LPC1768
/TOOLCHAIN_GCC_ARM/board.o mbed/TARGET_LPC1768/TOOLCHAIN_GCC_ARM/retarget.o
-lstdc++ -lsupc++ -lm -lc -lgcc -lnosys -lstdc++ -lsupc++ -lm -lc -lgcc -lnosys
-L/usr/local/lib/MY_LIB.a
main.o: In function `main':
然後我得到undefined reference to <function>
誤差爲MY_LIB
定義的每個功能。
我的理解是MY_LIB.a
只需在main.o
之後使用它即可。
我也嘗試過-o MyProg.elf main.o
之後連接(立即),但後來我得到could not read symbols: File in wrong format
。
什麼是鏈接這個庫的正確方法?是否需要在上一步中鏈接以正確的格式在此處列出?這是如何完成的?
通常的做法是'-L/usr/local/lib'將'/ usr/local/lib'添加到庫搜索路徑,然後'-lMY_LIB'實際鏈接到庫(必須是名爲'libMY_LIB.a')。 – Mankarse
'-L'增加一個路徑,'-l'鏈接一個庫,你可以給'-l'一個完整的路徑,以避免需要使用'-L',但是給出一個完全路徑到'-L'這沒有意義。 –
@EtanReisner啊 - 謝謝你們,我開始想知道有什麼不同,應該遵循這個想法。不過'-L/usr/local/lib /'和'-lMY_LIB.a'我得到了「找不到-lMY_LIB.a」。 – OJFord