我有一个关于gcc链接器的问题。
我正在处理嵌入式设备(PIC32),但是PIC32的编译器和链接器基于gcc,因此,“常规”的gcc链接器和PIC32链接器的主要内容应该是相同的。
为了节省闪存空间(微控制器上通常不足),我需要将几个大型函数放在引导加载程序中,并且应用程序应该通过指针调用这些函数。
所以,我需要在生成的代码中创建向量表。
我试图获取函数的绝对地址并将其写入生成的代码,但仍然出现错误。
以下示例中,我试图获取函数_formatted_write的地址。
代码:
链接器返回错误:"
我注意到如果我写一些垃圾而不是
这使我想到我应该执行一些附加步骤来使它"可解决"。但还不知道怎么做。
我正在处理嵌入式设备(PIC32),但是PIC32的编译器和链接器基于gcc,因此,“常规”的gcc链接器和PIC32链接器的主要内容应该是相同的。
为了节省闪存空间(微控制器上通常不足),我需要将几个大型函数放在引导加载程序中,并且应用程序应该通过指针调用这些函数。
所以,我需要在生成的代码中创建向量表。
我试图获取函数的绝对地址并将其写入生成的代码,但仍然出现错误。
以下示例中,我试图获取函数_formatted_write的地址。
代码:
.user_addr_table _USER_ADDR_TABLE_ADDR :
{
KEEP(*(.user_addr_table))
LONG((ABSOLUTE(_formatted_write))); /* _formatted_write is a name of my function */
} > user_addr_table
链接器返回错误:"
在表达式中引用了无法解析的符号“_formatted_write”
"。我注意到如果我写一些垃圾而不是
_formatted_write
,那么它会返回错误"未定义的符号.....
",因此链接器知道_formatted_write
。这使我想到我应该执行一些附加步骤来使它"可解决"。但还不知道怎么做。