用C+构建C应用程序+;编译程序 我有一个应用程序,它是用C++编写的一个新的功能。我用GCC构建C应用程序。 要添加新功能,请执行以下操作:
使用G++构建现有应用程序用C+构建C应用程序+;编译程序 我有一个应用程序,它是用C++编写的一个新的功能。我用GCC构建C应用程序。 要添加新功能,请执行以下操作:,c++,c,gcc,g++,undefined-reference,C++,C,Gcc,G++,Undefined Reference,使用G++构建现有应用程序 添加新功能 当我尝试执行(1)时,我遇到了以下问题: 在文件dev_table.c中定义的数组: const type_name devices[]={…} 在文件stm.c中,我通过以下方式导出此数组: extern const type_name devices[] 当我分配 stm->dev=设备 链接器失败 如果我使用GCC构建相同的代码,那么一切都正常,工作正常,但是使用G++就失败了 如果我从这两个位置(dev_table.c和stm.c)删除const)
const type_name devices[]={…}代码>
在文件stm.c中,我通过以下方式导出此数组:
extern const type_name devices[]代码>
当我分配
stm->dev=设备代码>
链接器失败
如果我使用GCC构建相同的代码,那么一切都正常,工作正常,但是使用G++就失败了
如果我从这两个位置(dev_table.c
和stm.c
)删除const
),它也能正常工作,因此问题得到了解决,但我不明白原因是什么。我建议您看看
嗯,因为常量是隐式静态的,所以即使在a_global_var定义(在file.c中)上也需要一个extern。如果没有这个,任何包含file.h的内容都不会链接,因为它正在寻找具有外部链接的const int a_global_var
或
您可以将它们一起使用(extern
和const
)。但是,在使用const时,需要保持一致性,因为当C++进行名称修饰时,const包含在用于装饰符号名称的类型信息中。所以extern const int i将引用与extern int i不同的变量
除非您使用extern“C”{}。C名称装饰不注意常量
什么是你刚才得到的错误?当你用<代码> G++< /Cuff>构建输出命令行时,你的命令行是什么?输出是什么?不能用C++来分配数组。IDK如果你可以在C,但你不能在C++中。如果您需要,我建议您使用“C代码> GCC < /COD>,C++源代码,使用代码< > G++<代码>,并与<代码> G++<代码>链接,使用C编译器来编译C代码。您可以在C++中编写新代码,并将其他文件链接在一起。