This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/CCStudio:将第一个 C++文件添加到现有 CCS 工程时出错(#39;C#39;)

Guru**** 2595805 points
Other Parts Discussed in Thread: CC1352P

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/963104/ccs-ccstudio-errors-when-adding-first-c-file-to-existing-ccs-project-c

器件型号:CCStudio
主题中讨论的其他器件:CC1352P

工具/软件:Code Composer Studio

您好-

我继承了一个现有 CCS 工程、该工程在"C"语言中包含基于 CC13532P "传感器"应用程序的源代码。  我编写了一个 C++类(在接口文件和实现文件对中)并将其添加到项目中。  出现了许多与新源代码中的语法无关的错误、但似乎与未为 C++正确配置项目相关。  我可以使用一些帮助重新配置项目、希望不要重新创建)。

出现的错误包括:

新的源代码包括 。  预处理器找不到中使用的符号 :   #20 identifier _LIBCPP_BEGIN_namespace_STD 未定义。

在处理新的 C++文件时、"sensors.opts"文件中列出的所有定义都不会提供给编译器。  例如、"sensors.opts"包含以下定义:"-DOSAL_PORT2TIRTOS "。  此宏在编译 C++文件时未定义、但在编译"C"文件时定义。

项目构建配置使用 TI 编译器 v20.2.3 LTS、该编译器使用支持 C 和 C++的"armcl"编译器。

E2E 论坛上的其他帖子建议启用项目属性[ARM Compiler->Advanced Options->Language Options]下的"Treat C files as C++ files"选项。  我尝试过这种方法、但这会在现有的"C"代码中导致大量编译错误、直到现在、这些代码已完全编译。

最后、为了尽可能多地解决编译错误、我必须将两个新的 C++文件显式添加到项目属性[ARM 编译器->Advanced Options->File Type Specifier (.C .cpp.cc 的默认值)(-cpp_file、-FP)"部分中。  鉴于 armcl 编译器用于'C'和 C++、我认为没有必要显式标识文件、因为文件名上的后缀会提示编译器内部的内容。

我使用的是 CCS v10.1.1.00004。  项目详细信息包括:

  • 项目基于 CC1352P"传感器"应用。
  • 编译配置使用 TI 编译器 v20.2.3 LTS  
  • 包括 XDCTools 3_61_02_27_CORE
  • 包括 SimpleLink CC13x2/26x2 SDK 3_40_00_02

提前感谢您周到的回复。

Jason

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    更多项目设置:

    • C Dailect:C11
    • C++故障:C++14

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    确保 C++源文件使用扩展名.cpp。  否则、它与向工程中添加任何其他源文件相同。  这些其他项目变化都没有...

    [引用 user="JasonR"]启用项目属性[ARM 编译器->高级选项->语言选项]下的"将 C 文件视为 C++文件"选项

    (笑声) 或者...

    [引用 user="JasonR"]将两个新的 C++文件显式添加到项目属性[ARM Compiler->Advanced Options->File Type Specifier ]的“File is a C++ file (.C .cpp.cc 的默认值)”部分

    (笑声) 的解决方案。   

    如果这不能解决问题、那么我需要查看构建日志。  请重建所有文件。  右键点击工程名称、然后选择  Rebuild Project。  在"Console"视图中、使用图标  Copy Build Log 将所有内容保存到文本文件中。  确保日志文件使用文件扩展名.txt。  将其附加到您的下一个项目。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢你、George。

    我已经完成了上述操作。

    • 已确保 C++文件具有.cpp 后缀
    • 已禁用"将 C 文件视为 C++文件"
    • 从列表中删除了 C++文件名。
    • 清理并重建项目。

    我已在重建后附加日志文件。

    谢谢、

    Jason

    e2e.ti.com/.../3632.Build-Log.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    一个名为  BoardLevelTest.c 的文件会出现所有错误

    此文件必须#include 或通过另一个包含文件。  通常,这会导致类似于...的错误。

    "file.c"、第1行:致命错误:无法打开源文件"cstdint" 

    在这种情况下不会发生这种情况,因为编译器选项...

    --include_path="/Applications/ti/ccs1011/ccs/tools/compiler/ti-cgt-arm_20.2.3.LTS/include/libcxx 

    指定此 include 目录。  如果,这是典型的,指定了这个 include 目录...

    --include_path="/Applications/ti/ccs1011/ccs/tools/compiler/ti-cgt-arm_20.2.3.LTS/include 

    (笑声) 编译器会根据需要自动搜索 libcxx 子目录。  由于明确指定了 libcxx、因此搜索错误。  这会导致 C++头文件 cstdint 包含在 C 源文件中。

    这解释了许多错误、但并非所有错误。

    考虑此错误诊断...

    "./application/RadioManager.hpp "、第16行:错误#66:预期为";" 

    任何包含文件的文件扩展名都不会影响其编译方式。  该头文件的编译方式与 C 相同、而不是 C++、因为它包含在 C 文件中。   

    考虑此错误诊断...

    "../application/BoardLevelTest.c、第116行:错误#760:变量"RadioManager"不是类型名称 

    这可能是在 C 文件中使用 C++语法的情况。

    解决 方案是安排将 BoardLevelTest.c 编译为 C++文件。  一种方法是将文件扩展名更改为.cpp。  有关更多详细信息、 请在 TI ARM 编译器手册中搜索 标题为 "指定文件名"的子章节。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我删除了用于 include/libcxx 的显式包含路径、然后重命名了一些文件上的后缀、最后 完成一些与 C 和 C++代码(extern "C")组合相关的小问题。  现在所有编译和链接。

    再次感谢你。