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/AM5728:在GCC编译器使用的START_ARMCA15.S中定义的堆栈变量中,C++生成报告错误。

Guru**** 2595800 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/621200/ccs-am5728-c-build-reports-error-with-stack-variable-defined-in-startup_armca15-s-used-with-gcc-compiler

部件号:AM5728

工具/软件:Code Composer Studio

当    使用Linaro GCC编译器A15内核编译代码时,当编译CCS中提供的文件START_ARMCA15.S时,G++ Linker报告未定义__stack错误。 C++链接器似乎区分大小写,因为将__stack更改为__Stack似乎可以解决问题。

要重现此问题,请按照下面的说明创建C++项目:

添加 startup_ARMCA15.S和链接程序命令文件并生成项目。 项目示例附后:

e2e.ti.com/.../Cpp_5F00_test.zip

此致,

拉胡尔

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

    Rahul,

    感谢您发送详细的测试案例。 我能够导入您的现有项目并看到未定义的__stack符号错误:

    '调用:交叉G++链接器'
    arm-none-eabi-g++-L"C:\ti\ccsv7\tools\compiler\gcc-none-eabi-4_9-2015q3\lib"-mtune=cortex-a15 -marm -Dk2g02 -Darm02 -darm0 -g -gccc--gf-3 -gstricf-corf -wl -wlxwlxwl=-xfrom-spxsp_spre-spre-xspre-spre-xspys -xsp-sp-xsp-xspys -spre-spre-sp-sp-xwl/spys -xsp-sp-sp-sp-sp-xspys -xsp-sp-sp-xsp-xsp-xsp-xwlwbwbwbwl/sp-sp-xsp-xsp-sp-xsp-xsp-
    C:/ccsv7_1_0/ccsv7/tools/compiler/gcc-arm-none-eabi-4_9-2015q3/bin/./lib/gcc/arm-none-eabi/thes.3/./././././././././arm-none-eabi/lib/armv7-ar/start_0' 4.9 :在`中:
    (.text+0x58):对`__stack'的引用未定义

    [/引述]

    但是,您切换到大写字母的事实有点令人困惑。 出现的错误是无法找到符号__stack,该符号在<startup_ARMCA15.S>中定义为global,并在链接程序脚本66AK2Gxx.lds的第179行初始化。  

    因此,查看上面的链接程序行可以判断链接程序脚本根本不包括。 要执行此操作,只需将选项-t"./src/66AK2Gxx.lds"添加到链接器的其他选项,如下所示。

    我真的不能解释为什么大写名称是相关的,但我怀疑nosys库中有什么定义了它。  

    我在您的项目中发现了一些其他有趣的事情:

    -您将在c++项目中显式包含libc

    - cout与“nosys”规格一起使用。 但是,由于nosys缺乏半宿主支持,这可能会影响代码功能。 您应该将其更改为"rdimon"以获得完全支持。

    希望这能有所帮助,

    拉斐尔

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

    谢谢拉斐尔。 这解决了我的问题。 我有点惊讶链接器没有用我的C代码生成此错误,而是用C++代码抛出此错误。 我忽略了栈变量在.lds文件中初始化的事实。 感谢您指出这一点。

    对于半托管支持,我将添加rdimon。 这只是为A15内核构建更大的C++项目的第一步,因此如果有任何其他问题,我将创建一个新线程。