GCC共享库链接

时间:2017-01-18 20:06:53

标签: c++ linker static-libraries

我使用GCC创建共享库(.so)和在Cortex-M4微控制器上运行的应用程序。

如果我将库编译为静态库,然后编译主应用程序(使用库),则所有内容都会编译,结果是单个(但大小相当大)二进制文件。

当我将库更改为共享,然后重新编译它和主应用程序时,链接阶段会引发许多错误:

Invoking: Cross ARM C++ Linker arm-none-eabi-g++ -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -g3 -T "C:/Users/workspace.kds/MyProject/Project_Settings/Linker_Files/linker.ld" -Xlinker --gc-sections -L"C:/Users/workspace.kds/MyProject/Project_Settings/Linker_Files" -L"C:\Users\workspace.kds\MyLibrary\Debug" -Wl,-Map,"MyProject.map" -specs=nano.specs -specs=nosys.specs -o "MyProject.elf" ./Sources/main.o ./Project_Settings/Startup_Code/startup.o -lMyLibrary c:/freescale/kds_v3/toolchain/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/bin/ld.exe: section .dynamic loaded at [00011d28,00011ddf] overlaps section .romp loaded at [00011d28,00011d4b] c:/freescale/kds_v3/toolchain/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/bin/ld.exe: BFD (GNU Tools for ARM Embedded Processors) 2.23.2.20140731 assertion fail /home/build/work/GCC-4-8-build/src/binutils/bfd/elf32-arm.c:7730 c:/freescale/kds_v3/toolchain/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/bin/ld.exe: BFD (GNU Tools for ARM Embedded Processors) 2.23.2.20140731 assertion fail /home/build/work/GCC-4-8-build/src/binutils/bfd/elf32-arm.c:7730 c:/freescale/kds_v3/toolchain/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/bin/ld.exe: BFD (GNU Tools for ARM Embedded Processors) 2.23.2.20140731 assertion fail /home/build/work/GCC-4-8-build/src/binutils/bfd/elf32-arm.c:7730 c:/freescale/kds_v3/toolchain/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/bin/ld.exe: BFD (GNU Tools for ARM Embedded Processors) 2.23.2.20140731 assertion fail /home/build/work/GCC-4-8-build/src/binutils/bfd/elf32-arm.c:7730 c:/freescale/kds_v3/toolchain/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/bin/ld.exe: BFD (GNU Tools for ARM Embedded Processors) 2.23.2.20140731 assertion fail /home/build/work/GCC-4-8-build/src/binutils/bfd/elf32-arm.c:7730 c:/freescale/kds_v3/toolchain/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/bin/ld.exe: BFD (GNU Tools for ARM Embedded Processors) 2.23.2.20140731 assertion fail /home/build/work/GCC-4-8-build/src/binutils/bfd/elf32-arm.c:7730 c:/freescale/kds_v3/toolchain/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/bin/ld.exe: BFD (GNU Tools for ARM Embedded Processors) 2.23.2.20140731 assertion fail /home/build/work/GCC-4-8-build/src/binutils/bfd/elf32-arm.c:7730 c:/freescale/kds_v3/toolchain/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/bin/ld.exe: BFD (GNU Tools for ARM Embedded Processors) 2.23.2.20140731 assertion fail /home/build/work/GCC-4-8-build/src/binutils/bfd/elf32-arm.c:7730 c:/freescale/kds_v3/toolchain/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/bin/ld.exe: BFD (GNU Tools for ARM Embedded Processors) 2.23.2.20140731 assertion fail /home/build/work/GCC-4-8-build/src/binutils/bfd/elf32-arm.c:7730 c:/freescale/kds_v3/toolchain/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/bin/ld.exe: BFD (GNU Tools for ARM Embedded Processors) 2.23.2.20140731 assertion fail /home/build/work/GCC-4-8-build/src/binutils/bfd/elf32-arm.c:7730 c:/freescale/kds_v3/toolchain/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/bin/ld.exe: BFD (GNU Tools for ARM Embedded Processors) 2.23.2.20140731 assertion fail /home/build/work/GCC-4-8-build/src/binutils/bfd/elf32-arm.c:7730 c:/freescale/kds_v3/toolchain/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/bin/ld.exe: BFD (GNU Tools for ARM Embedded Processors) 2.23.2.20140731 assertion fail /home/build/work/GCC-4-8-build/src/binutils/bfd/elf32-arm.c:7730 c:/freescale/kds_v3/toolchain/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/bin/ld.exe: BFD (GNU Tools for ARM Embedded Processors) 2.23.2.20140731 assertion fail /home/build/work/GCC-4-8-build/src/binutils/bfd/elf32-arm.c:7730 c:/freescale/kds_v3/toolchain/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/bin/ld.exe: BFD (GNU Tools for ARM Embedded Processors) 2.23.2.20140731 assertion fail /home/build/work/GCC-4-8-build/src/binutils/bfd/elf32-arm.c:7730 c:/freescale/kds_v3/toolchain/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/bin/ld.exe: BFD (GNU Tools for ARM Embedded Processors) 2.23.2.20140731 assertion fail /home/build/work/GCC-4-8-build/src/binutils/bfd/elf32-arm.c:7730 c:/freescale/kds_v3/toolchain/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/bin/ld.exe: BFD (GNU Tools for ARM Embedded Processors) 2.23.2.20140731 assertion fail /home/build/work/GCC-4-8-build/src/binutils/bfd/elf32-arm.c:7730 c:/freescale/kds_v3/toolchain/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/bin/ld.exe: BFD (GNU Tools for ARM Embedded Processors) 2.23.2.20140731 assertion fail /home/build/work/GCC-4-8-build/src/binutils/bfd/elf32-arm.c:7730 c:/freescale/kds_v3/toolchain/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/bin/ld.exe: error: required section '.rel.plt' not found in the linker script c:/freescale/kds_v3/toolchain/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/bin/ld.exe: final link failed: Invalid operation collect2.exe: error: ld returned 1 exit status makefile:58: recipe for target 'MyProject.elf' failed make: *** [MyProject.elf] Error 1

或者缩短一点

section .dynamic loaded at [00011d28,00011ddf] overlaps section .romp loaded at [00011d28,00011d4b]

是否需要使用与主应用程序相同的链接器配置编译共享库?如果是这样,为什么同一个库的静态构建工作正常?

提前感谢任何建议。

0 个答案:

没有答案
相关问题