Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake在.obj文件之后添加链接器选项_Cmake_Linker_Embedded_Linker Errors_Static Linking - Fatal编程技术网

CMake在.obj文件之后添加链接器选项

CMake在.obj文件之后添加链接器选项,cmake,linker,embedded,linker-errors,static-linking,Cmake,Linker,Embedded,Linker Errors,Static Linking,使用CMake交叉编译嵌入式系统的可执行文件需要我手动添加链接选项来链接libc、libgcc等等。但是,使用target_link_选项会导致一个链接器调用,其中所有这些附加链接选项都添加到从实际代码生成的所有对象文件之前。我认为这是错误的链接顺序,每当我试图覆盖标准库中的弱符号(例如uu cxa_pure_virtual)时,都会导致“重复符号错误” 下面是我从链接阶段获得的输出示例 "/usr/bin/ld.lld" --gc-sections /usr/arm-none-eabi/l

使用CMake交叉编译嵌入式系统的可执行文件需要我手动添加链接选项来链接libc、libgcc等等。但是,使用target_link_选项会导致一个链接器调用,其中所有这些附加链接选项都添加到从实际代码生成的所有对象文件之前。我认为这是错误的链接顺序,每当我试图覆盖标准库中的弱符号(例如uu 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
“/usr/bin/ld.lld”
--gc部分
/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
--开始组-lstdc++_nano-lm-lgcc-lc_nano-结束组
my.obj//<不应该首先链接对象文件和应用程序库吗?
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
-哦,我的

在CMake中有什么方法可以解决这个问题吗?

target\u link\u options
指定链接器的选项,并且通常先指定选项。使用
target\u link\u libraries
链接库。

target\u link\u options
指定链接器的选项-通常在指定其他选项之前指定选项。使用
目标链接库
链接库。

目标链接库选项
替换为
目标链接库
错误的链接顺序
顾名思义,
目标链接选项
向链接器添加选项。通常情况下,选项是在指定其他选项之前指定的
会导致“重复符号错误”
我猜这是由
--start group
/
--end group
选项引起的。这是一个快速修复方法。如果您将此作为答案发布,我很乐意接受。链接器选项通常添加在对象之前,但并不总是如此。请将
target\u link\u选项
替换为
target\u link\u库
错误的链接顺序
顾名思义,
目标链接选项
向链接器添加选项。通常情况下,选项是在指定其他选项之前指定的
会导致“重复符号错误”
我猜这是由
--start group
/
--end group
选项引起的。这是一个快速修复方法。如果你把这个作为答案,我很乐意接受。链接器选项通常是在对象之前添加的,但并不总是这样。