【问题标题】:CMake add linker options after .obj filesCMake 在 .obj 文件之后添加链接器选项
【发布时间】:2020-09-25 15:32:14
【问题描述】:

使用 CMake 为嵌入式系统交叉编译可执行文件需要我手动添加链接选项以链接 libc、libgcc 等。但是,为此使用 target_link_options 会导致链接器调用,其中所有这些附加链接选项都添加到从我的实际代码生成的所有目标文件的前面。我认为这是错误的链接顺序,每当我尝试覆盖标准库中的弱符号(例如 __cxa_pure_virtual)时,它都会导致“重复符号错误”。

这是我从链接阶段获得的输出示例

"/usr/bin/ld.lld" 
--gc-sections 
/usr/arm-none-eabi/lib/crt0.o 
/usr/lib/gcc/arm-none-eabi/10.1.0/thumb/v7e-m+fp/hard/crti.o 
/usr/lib/gcc/arm-none-eabi/10.1.0/thumb/v7e-m+fp/hard/crtbegin.o 
/usr/lib/gcc/arm-none-eabi/10.1.0/thumb/v7e-m+fp/hard/crtn.o 
/usr/lib/gcc/arm-none-eabi/10.1.0/thumb/v7e-m+fp/hard/crtend.o 
--start-group -lstdc++_nano -lm -lgcc -lc_nano --end-group 
my.obj  ///< Shoudln't object files and application libs be linked first?
libmylib.a
-Bstatic 
-L/usr/lib/clang/10.0.0/lib/baremetal 
-L/usr/arm-none-eabi/lib/thumb/v7e-m+fp/hard/ 
-L/usr/lib/gcc/arm-none-eabi/10.1.0/thumb/v7e-m+fp/hard/ 
-T ldscript.ld
-o myelf

有没有办法在 CMake 中解决这个问题?

【问题讨论】:

  • target_link_options 替换为target_link_librariesthe wrong linking order 顾名思义,target_link_optionsoptions 添加到链接器。通常选项是在其他任何事情之前指定的。 and it causes "duplicate symbol errors" 我猜这是由--start-group/--end-group 选项引起的。
  • 嗯,这是一个快速修复。如果您将其发布为答案,我很乐意接受。
  • 链接器选项通常添加在对象之前,但并非总是如此。

标签: cmake linker embedded linker-errors static-linking


【解决方案1】:

target_link_options 指定链接器的选项 - 通常选项在其他任何内容之前指定。使用target_link_libraries 链接库。

【讨论】:

    猜你喜欢
    • 2014-07-12
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多