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.

[参考译文] 编译器/TMS320TCI6614:链接器错误:符号"fputs"重新定义。 链路顺序,--priority不能提供帮助。

Guru**** 2589280 points
Other Parts Discussed in Thread: SYSBIOS, MATHLIB

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/605289/compiler-tms320tci6614-linker-error-symbol-fputs-redefined-link-order---priority-doesn-t-help

部件号:TMS320TCI6614
主题中讨论的其他部件:SysBIOSMATHLIB

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

您好!

我的项目遇到了浮动问题。 上次复制项目文件并尝试将其用于另一个项目时发生。 链接失败,并显示消息:

链接>

错误#1.0056万:重新定义符号"fputs":首先在"/.../Our.lib<debug.obj>"中定义;在"/opt/ti/ccs710/ccsv7/tools/compiler/ti-CGT-C6000_fts6600_elf.lib<fputs.obj>"中6600中重新定义8.1
错误#1.001万:链接时出错;未生成"Module.Our.out

Our.lib.lib包含系统资料。

源文件中的应用程序代码。

链接命令:

正在调用:C6000 Linker
我们8.1 的模块="opt/ti/ccs710/ccsv7/tools/compiler/ti-CGT-C6000_ROM.3/bin/cl65"-mv6600 -O2 --opt_for speed=4 -g --define=__--diag_warning=225 --diag_warn=off -diag_warn=b=2--display_error_rc0.ibs/model/ccti_sp.cm/ccti_cscrebs.lin/line. 8.1 8.1 “…… obj "" obj”........ obj "" “…… obj""../rm_linker.cmd"-l"configPkg/linker.cmd"-l"/..... /our.lib.lib"-libc.a

我尝试更改链接顺序。 已尝试删除--reread_libs并添加--priority。

这无助于事。  

我不了解链接器为什么使用'standard library'中的fputs... 以及项目在其他机器上或其他时间成功构建的原因。

代码编辑器工作室版本:7.1 .0.0.0016万。 xdctools_3_32_00_06。  

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

    在这些情况下,通常最有效的方法是使用--priority,确保链接程序只能看到每个库名一次,并且这些库名是按其使用顺序排列的。  

    我怀疑这些链接程序命令文件中有什么内容...

    Andrey Grechin 说:
    "./rm_linker .cmd"-l"configPkg/linker .cmd"

    ...影响着事物。  这些文件是否有与此连接的库名称或链接器选项?

    谢谢,此致,

    -George

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

    -l"../build.Debug/configPkg/package/cfg/OurProject_pe66.oe66"
    -l"..../src/IPC/IPC.ae66"
    -l"..../src/utils/utils.ae66"
    -l"../src/SysBIOS/SysBIOS.ae66"
    -l".../ti/mathlib_c66x_3_1_0/packages/ti/mathlib/mathlib.ae66"
    -l".../pdm_tci6614/packages/ti/CSL/lib/ti.csl.ae66"
    -l".../pdm_tci6614/packages/ti/drv/rm/lib/ti.drv.rm.ae66"
    -l".../pdm_tci6614/packages/ti/drv/srio/lib/ti.drv.srio.ae66"
    -l".../pdm_tci6614/packages/ti/drv/clib/ti.drv.cppi.ae66"
    -l"./pdk_tci6614/packages/ti/drv/qmss/lib/ti.drv.qmss.ae66"
    -l"..../ti/bios_6_45_01_29/packages/ti/targets/rts6000/lib/ti.targets.rts6000.ae66"</s>6000.
    -l"..../ti/bios_6_45_01_29/packages/ti/targets/rts6000/lib/boot.ae66"

    但是

    排除源分步I调查错误出现的时间

    std::vector<T>.resize (newSize);
    OR构造函数std::vector<T>(size);

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

    感谢您提供更多详细信息。  我可以重现该问题。  我在 SDOWP系统中提交了CodeGen-2367以解决此问题。  它包含对出错内容的详细描述。  我不想在这里包括全部解释。  一个关键的细节是STL报头调用该函数在紧急情况下(如内存分配失败时)。  这会启动一系列异常情况,并以链路故障结束。

    另一种解决方法是在您的自定义库中提供放置函数Our.lib.lib。  然后它可以称为您的fputs。  这是否切实可行?

    谢谢,此致,

    -George

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

    谢谢 你乔治,好消息:)

    我们将尝试使用"放置"解决方法。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请注意,此错误记录已关闭。 出现此错误是因为在我们的RTS中,在同一文件中定义了fputs和puts。 如果您替换我们的fputs定义,您还必须替换puts定义。 这是我们提供的一个--你可以简单地把它添加到你的文件定义fputs。

    Int置入(const char *_ptr)

    int count = fputs(_ptr,stdout);
    count += fputs("\n", stdout;
    返回计数;
    }