首页 > 解决方案 > Xilinx sdk:链接器不会链接cross-c/c++

问题描述

我正在使用 Xilinx SDK 为 Zynq 7020 进行编译。

我遇到的问题的一个例子是这个

一些文件.c:

void someFunction () { }

一些文件.h

void someFunction () ;

主文件

extern "C" {
#include "SomeFile.h"
}

int main ( int , char const* * ) {
    someFunction () ; // This line
    return 0 ;
}

标记为“此行”的行出现链接器错误,因为它找不到符号“someFunction”。

我知道该.c文件正在编译(如果我在其中放入垃圾字符,则无法构建)。我知道它具有相同的原型(但是,使用 C 链接,没关系)。

Xilinx 套件似乎没有在 C/C++ 目标文件之间运行链接器,我不知道如何说服它这样做。

我该如何解决?

注意:这是使用 gnu 工具链。

标签: xilinx

解决方案


所以事实证明这是因为 Xilinx SDK 默认.c使用 g++ 编译文件,而不是 gcc,它发出了 C++ 错误名称someFunction而不是 C 名称。然后,当.cpp文件用来extern "C"引用它时,它正在寻找一个 C 风格的符号,而不是 C++ 风格的 [mangled] 符号。

我必须右键单击.c文件才能进入它们的构建设置并手动将编译器更改为whatever-whatever-g++whatever-whatever-gcc可以工作。


推荐阅读