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.
器件:F29379D
CCS:版本:10.2.0.00009
编译器:TI v21.6.0.LTS
所有、
有人能向我介绍一些有关如何将提供的 C2000器件支持与 CPP 配合使用的文档吗?
C2000ware 上的当前版本提供了 pragma 和指针转换错误。
通过 Google 和这些论坛搜索类似问题会导致链接已过期。
感谢您提供任何信息! 谢谢。
尊敬的 William:
请告诉我、这是否正确理解了这种情况-您有一个项目、其中包含您自己的.cpp 源文件、其中包括 C2000Ware 中上述器件的.h 文件、并且您正在运行到编译器错误中。
请 您能否发布特定错误消息。
谢谢、
Ashwini
80/20规则! 我明白了。 我的项目是我要转换的 C 和 C++的混合项。
"-CPP_DEFAULT"参数似乎会破坏 C2000Ware 的功能。
链接器错误是 C 和 C++文件的伪影、包括具有外部函数原型的头文件。 编译器是否改编了函数名称(CPP)基本上存在竞态条件(C)。
通常、我通过从 H 文件中删除 extern 函数原型并将其放在需要它们的 CPP 文件的顶部来修复此问题。 这是一个混乱的问题、但在转换结束之前是一个临时修复。
是否有任何相关文档? 或者专门转换为 C++?
尊敬的 William:
感谢后续行动。 我将与团队核实并告知您。
谢谢、
Ashwini
导入 CCS 10.4后、示例 C2000Ware (3.04.00.00)-> English -> Devices -> F2837XD -> F28379D -> Examples -> Driverlib -> CPU1 -> LED_ex1_blinky
在最初将示例源文件 LED_ex1_blinky.c (C)重命名 为 led_ex1_blinky.cpp (C++)后、出现链接器错误、这将是由于名称改编:
Building target: "led_ex1_blinky.out" Invoking: C2000 Linker "/home/mr_halfword/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_20.2.5.LTS/bin/cl2000" -v28 -ml -mt --cla_support=cla1 --float_support=fpu32 --tmu_support=tmu0 --vcu_support=vcu2 -Ooff --define=CPU1 --diag_suppress=10063 --diag_warning=225 --diag_wrap=off --display_error_number --abi=eabi -z -m"led_ex1_blinky.map" --stack_size=0x100 --warn_sections -i"/home/mr_halfword/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_20.2.5.LTS/lib" -i"/home/mr_halfword/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_20.2.5.LTS/include" --reread_libs --diag_wrap=off --display_error_number --xml_link_info="led_ex1_blinky_linkInfo.xml" --entry_point=code_start --rom_model -o "led_ex1_blinky.out" "./led_ex1_blinky.obj" "./device/F2837xD_CodeStartBranch.obj" "./device/device.obj" "../2837xD_RAM_lnk_cpu1.cmd" "/home/mr_halfword/ti/C2000Ware_3_04_00_00_Software/driverlib/f2837xd/driverlib/ccs/Debug/driverlib.lib" -llibc.a <Linking> undefined first referenced symbol in file --------- ---------------- Device_init() ./led_ex1_blinky.obj Device_initGPIO() ./led_ex1_blinky.obj error #10234-D: unresolved symbols remain error #10010: errors encountered during linking; "led_ex1_blinky.out" not built
// // Included Files // extern "C" { #include "driverlib.h" #include "device.h" }
更改后、示例成功链接。
[引用 userid="88556" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1042804/codecomposer-c2000-cpp-device-support/3857910 #3857910"]通常、我通过从 H 文件中删除 extern 函数原型并将其放在需要它们的 CPP 文件的顶部来解决此问题。 这是一个混乱的问题、但在转换结束之前是一个临时修复。将任何 C2000Ware 包含在 C++源文件中的 extern "C"块中、这可能是一种更简单的解决方法。
不确定是否有任何计划使 C2000Ware 包含文件使用 #ifdef _cplusplus extern "C" 来简化从 C++调用 C2000Ware 函数。 请参阅 将#ifdef _cplusplus extern "C"添加到所有.h、以启用从 C++进行调用 、了解来自不同工程的一些背景信息。
切斯特、
感谢您一如既往的高质量响应。
即使使用 extern "C"包装程序(我应该已经说明我确实这么做了)、我也得到了链接器错误。 我在链接器设置中启用了一个选项、以不对控制台错误转储中的函数调用进行去混合、这样我就可以看到它是对中断的函数的 C (正常)还是 CPP (已改编)引用。
我在调试语义模式中、因此在这里可能出了问题、但我认为问题是这样的:
我有一个 CPP 文件从另一个 CPP 文件调用函数、但 extern 定义位于 H 文件中、该文件包含在一组文件中、一些 C 和一些 CPP 中。 将其从该文件中删除、以便仅在 CPP 文件中列出、从而修复了它。 就像我说的那样、这是一件混乱的事情。
你(们)好
Chester 和 William、
感谢上述详细答复。 该团队报告说、C2000Ware 未经过 C++测试。 我会 将这些 观察结果通知 C2000Ware 团队。
William、
您目前是否已解除封锁或仍面临问题?
谢谢、
Ashwini
是的、它目前可以正常工作。