我无法链接到外部库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
。
链接此库的正确方法是什么?是否需要在上一步中链接到这里列出正确的格式?怎么做的?
答案 0 :(得分:1)
从您与adpeace的讨论中我收集的图书馆的目标是i386,而您正在使用的构建命令显示您正在瞄准手臂平台。
在这种情况下,您将无法使用此特定的库文件,并且需要找到它的arm版本。
答案 1 :(得分:0)
-L
仅指定库的搜索路径。您可以从包含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
/usr/local/lib/MY_LIB.a