Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.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
用C+构建C应用程序+;编译程序 我有一个应用程序,它是用C++编写的一个新的功能。我用GCC构建C应用程序。 要添加新功能,请执行以下操作:_C++_C_Gcc_G++_Undefined Reference - Fatal编程技术网

用C+构建C应用程序+;编译程序 我有一个应用程序,它是用C++编写的一个新的功能。我用GCC构建C应用程序。 要添加新功能,请执行以下操作:

用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)

使用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
    ),它也能正常工作,因此问题得到了解决,但我不明白原因是什么。

    我建议您看看

    嗯,因为常量是隐式静态的,所以即使在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++中编写新代码,并将其他文件链接在一起。