瑞萨编译错误符号_FunctionName乘法定义

时间:2014-12-02 08:00:55

标签: c compiler-errors embedded

我试图在RENESAS上编译,我收到以下错误:  符号_FunctionName乘法定义 它在我的一个.h文件中声明并在我的一个c文件中定义,而另一个在集成库中定义(我无法访问它)我尝试删除声明并只留下定义,但是这也没有用,我得到了同样的错误。 是否有任何编译器命令忽略这个?

2 个答案:

答案 0 :(得分:1)

你试图以错误的方式解决它。每个符号必须只有一个定义。因此,如果库中已有一个,请从代码中删除定义。您在.h文件中的声明可以帮助您访问该变量。

所有这些都假设您的声明很好地反映了库变量的类型和意图。如果没有,只需更改变量的名称以避免与库冲突。

答案 1 :(得分:1)

您所描述的是链接器错误,而不是编译器错误。目前尚不清楚"集成库" 的含义,但是当您链接静态链接库时,只需要解析未解析的符号所需的对象代码所有单独编译的目标代码都是显式链接的,因此通常只需在您自己的代码中定义符号就可以覆盖库定义。

但是,如果库的粒度不够,并且库中的单个对象模块包含多个公共符号,则如果引用一个,则所有其他公共符号都会链接。因此,在这种情况下,_FunctionName_AnotherFunctionName在同一模块中定义,并且您引用_AnotherFunctionName,那么_FunctionName也会被链接并与您的覆盖进行冲突。

理想情况下,库应该模块化,以便任何单个模块只定义一个公共接口 - 这样就可以覆盖任何单个接口。

一种可能的解决方案是确定哪些其他符号与_FunctionName共享同一个对象模块,然后定义它们;但这可能容易出错并且很复杂。

简单的解决方案不是使用与库中使用的名称相同的名称,但是这将不允许您的函数替换从库中对它进行的任何调用,这可能是您的意图。