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.
工具与软件:
您好、我有两个库、我已经成功使用 C2000归档器(v22.6.1)创建了: liba.lib 和 libb.lib
。 libb.lib 有一个对象 Cartridge_Public obj 其中包含一些 常量 在特定段中声明的表如下:
#pragma DATA_SECTION (cart_entry_point、"Cart_sect_entry_point")
const uint32_t cart_entry_point =(uint32_t)(&CMPCARTRIDGE_G_cart_boot_ADDR_VAL_U32);
#pragma DATA_SECTION (c_CmpCartridge G_CsciCartridge_s、"Cart_sect_identification")
const ts_CmpCartridge_G_BardgeSub c_CmpCartridge_G_CsciCartridge_s ={...};
该链接器项目中包含这两个库 liba.lib 和 libb.lib 、我创建了一个分区:
部分中)
{
cart_sect:
{
com_bs.lib (codestart){start (_CMPCARTRIDGE_G_Cart_BOOT_ADDR_VAL_U32)}
com_bs.lib (cart_sect_CRC32)
com_bs.lib (Cart_sect_start_ADDR)
com_bs.lib (cart_sect_size)
com_bs.lib (cart_sect_entry_point)
com_bs.lib (cart_sect_identification)
}>碳粉盒、对齐(2)
...
}
但编译期间有以下警告: #10068-D no matching section
通常、我将在.map 文件中包含以下内容:
cart_sect
* 0 00080000 00000080
00080000 00000002、Boot_Code、407.obj (codestart)
00080002 00000002 C307.obj Cartridge_Public (cart_sect_CRC32)
00080004 00000002 C370.obj Cartridge_Public (cart_sect_start_ADDR)
00080006 00000002 C1007.obj Cartridge_Public (cart_sect_size)
00080008 00000002 C307.obj Cartridge_Public (cart_sect_entry_point)
0008000a 00000076 C1007.obj Cartridge_Public (cart_sect_identification)
但我得到了以下信息:
cart_sect
* 0 00080000 00000002
00080000 00000002 COM_BS.lib : Boot_Code (codestart)
我无法理解链接器为何无法获取 libB.lib 中的段吗? 它适用于 CODE_SECTION 符号、但不适用于 DATA_SECTION 符号。。。
是否有来自 TI 专家的任何线索? 我现在被卡住了两天,这是一个有点果味的地方。。。
感谢 ADVANCE 提供的答案。
您好!
应用中是否使用了这些变量? 如果没有、链接器会从最终的.out 中删除所有未使用的段
尝试使用#pragma RETAIN 保留这些变量、以防应用程序中未引用这些变量
此致、
Veena.
你好 Veena,我试过,但我仍然有错误。 "c_CmpCartridge G_CsciCartridge_s"常量用于我存档的代码中 libb.lib .
在应用程序代码中使用这些变量的库函数是否是这样?
尝试添加一个代码片段、该代码片段仅读取 main 中某个位置的变量、以便链接器可以看到它被引用并保留这些变量
此致、
Veena.
感谢 Veena,我搜索并发现使用这个常数的函数没有被调用任何地方。 修补我的代码后,它工作!!