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.

[参考译文] MSP430FR2355:重新定义变量时出错?

Guru**** 2538930 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/954702/msp430fr2355-error-on-redefining-variables

器件型号:MSP430FR2355

我创建了一个包含头文件和源文件的库。  在头文件中,我有:

const int lookup[]={0、529、715、835、1001、 1252、1430、1670、2147、2224、 2503、3000、3333、\
3575、3753、4003、4286、4378、 5002、5715、6003、6254、6432、 6667、7001、\
7147、7503、7861、8004、8333、 8464、8572、8751、9004、9170、 9288};
const int reg_setting[]={0x0、0x1、0x2、0x4、0x8、 0x10、0x20、0x11、0x21、0x22、 \
0x44、0x25、0x49、0x4A、0x52、 0x92、0x53、0x55、0xAA、\
0x6B、0xAD、0xB5、0xB6、0xD6、 0xB7、0xBB、0xDD、0xED、\
0xEE、0xBF、0xDF、0xEF、0xF7、 0xFB、0xFD、0xFE};

此库中的源文件使用此文件。  然后、我可以成功编译库。  然后、我转到主应用程序并成功链接库。  但是、当我尝试构建主应用程序时、我会遇到以下错误:

错误#10056:重新定义符号"reg_setting":首先在"./main.obj"中定义;在"D:/Customers/Firmware/LPRS_lib/Debug/LPRS_lib.lib 中重新定义 "
错误#10056:重新定义符号"查找":首先在"./main.obj"中定义;在"D:/Customers/Firmware/LPRS_lib/Debug/LPRS_lib.lib 中重新定义 "

在任何应用程序代码中都没有与这些变量相关的引用。  有人能告诉我发生了什么以及如何修复吗?

谢谢

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

    您的头文件需要有 extern 声明、并且您需要在源文件中一次性定义它。 由于这些是全局变量、因此只能有一个定义、或者链接器会被混淆。 您*DO *在您#include 时在源文件中引用它们。

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

    这些常量 int 数组实际上由在库中执行数学运算的函数使用。  在应用程序代码中、我将参数传递给与 const int 数组无关的函数。 我希望库是自包含的。  CCS 中没有任何开关来建议编译器在编译应用程序时将其定义在库中?  也许我在这里感到困惑。  如果我从库头文件中删除 const int 数组并将它们放置在库源文件的函数范围内、则会出现该问题。主应用程序源代码(顺便说一下完全不同的 prj)编译时没有错误。  除非有理由不这样做,否则似乎是走的路??

    最后,我更希望不让将独立创建源代码的客户将库依赖项全部放在其代码中,并使用外部代码和定义...

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

    将数组放入源文件中、而不是头文件中。 如果您希望头文件可用于其他源文件、则只需将其放入头文件中。

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

    如果需要私有数据和公有数据、则可能需要2个标头。 一个公共的和一个私人的。