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.

[参考译文] 编译器/TMS570LC4357:重新定义malloc

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/635479/compiler-tms570lc4357-redefining-malloc

部件号:TMS570LC4357

工具/软件:TI C/C++编译器

我目前正在尝试为malloc编写自定义定义,根据我所读的内容,我不应该为该编译器做任何特殊的事情。 我可以在使用同一编译器的另一个项目中重新定义它,但是对于这个项目,它给我带来了以下错误:

错误:重新定义符号"_sys_memory":首先在"debug\src\memory.obj"中定义;
在中重新定义
"C:5.2 /ti/ccsv6/tools/compiler/ti-CGT-arm_eabi.6\lib/rtsv7R4_a_be_v3D16_eabi.lib
<memory.obj>"
错误:重新定义符号"malloc":首先在"debug\src\memory.obj"中定义;
在中重新定义
"C:5.2 /ti/ccsv6/tools/compiler/ti-CGT-arm_eabi.6\lib/rtsv7R4_a_be_v3D16_eabi.lib

<memory.obj>"
>>编译失败

>>编译失败
scons:由于错误导致构建终止。
错误:链接期间遇到错误;未生成"debug\my_out
错误:重新定义符号"_sys_memory":首先在"debug\src\memory.obj"中定义;
在中重新定义
"C:5.2 /ti/ccsv6/tools/compiler/ti-CGT-arm_eabi.6\lib/rtsv7R4_a_be_v3D16_eabi.lib
<memory.obj>"
错误:重新定义符号"malloc":首先在"debug\src\memory.obj"中定义;
在中重新定义
"C:5.2 /ti/ccsv6/tools/compiler/ti-CGT-arm_eabi.6\lib/rtsv7R4_a_be_v3D16_eabi.lib
<memory.obj>"
错误:链接期间遇到错误;未生成"debug\my_out

它似乎看到了我的定义和图书馆的定义,并不选择我的定义。 我尝试了'-x'和'-priority'标志,但没有任何改变。 我甚至更改了包括,链接和源文件的顺序以与我的其他项目匹配,但未解决问题。

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

    最可能的解释... 其他一些文件调用在RTS MEMORY.OBJ中定义的函数,而该函数未在自定义MEMORY.OBJ中定义。  可能的示例包括calloc和realloc。  这将使RTS MEMORY.OBJ进入链接。  反过来,这会导致这些符号重新定义的诊断。   

    要识别所有可能的问题符号,您需要知道RTS MEMORY.OBJ中定义了哪些全局符号。  首先,使用类似于...的命令从库中提取memory.obj。

    % armar -x C:/ti/ccsv6/tools/compiler/ti-CGT-arm_arm_memory.6/lib/rtsv7R4_a_be_v3D16_eabi.lib 5.2 memory.obj 

    然后,查看memory.obj中定义了哪些全局符号...

    % armnm -g memory.obi00000000
    w Lib$request$$armlib
    0万 w Lib$request$$cpplib
    0万 U __SYSMEM_size
    0万 D __TI_DW.debug_info.$base_types.c8c38483d660372cd06395436475430b
    00000000660372 00000000 D06395436475430 D __TI_DW.debug_info.memory.c.5e26099586665ed842c3e104eedb26f000000000 __TI_DW.debug_info.memory.c.5e26099586665ed842c3e104eedb26f0
    0000000026.0995万 00000000 D8.6665万 D __TI_DW.debug_info.stdlib.h.f65beb9c32b827fb8141906f6cc29560000000000 __TI_DW.debug_info.stdlib.h.f65beb9c32b827fb8141906f6cc29560
    000000008141906 00000000 U29560 U _lock00000000 _lock
    00000000 B
    
    
    
    alloc sys_memory 0万 U _unlock 0.0003万b3 t calloc 0.0003万 T free 000000000
    t minpy 0000000
    
    t 0000000 t m1b 000
    t realloc 

    第一个命令使用归档程序。  第二个使用名称实用程序。  阅读 支撑臂装配工具手册中有关这两种工具的信息。  在armnm输出中,只需担心标有T或B的符号。 T符号是函数。  B符号(只有一个)是变量。  要避免此问题,您的自定义memory.obj需要提供所有这些符号的定义。

    谢谢,此致,

    -George

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