背景
我正在使用GNU Tools for ARM Embedded Processors编译器,它是一个 GCC 编译器。我目前在 Windows 环境中工作。
我正在构建一个相对较大的项目,并且已经成功编译了所有源代码,但是在链接阶段面临挑战。这个特定平台作为两个独立的 RAM 区域,我需要将目标代码的某些部分映射到特定区域。
我想我应该能够使用链接器脚本,例如:
SECTIONS
{
ER_CCM 0x10000000:
{
* (.bss)
}
ER_SRAM 0x20000000:
{
someLib.obj (.bss)
}
}
但是,我的问题是编译器输出的是 .lib 文件(档案)而不是 .obj 文件。正在使用以下语法在所有存档文件的当前目录中调用链接器:
ld.exe --library-path=C:\SomePath\lib --Map C:\Somepath\bin\mapfile.map --script=C:\Somepath\bin\linkscript.ldf -( file1.lib file2.lib ... -)
即使 .lib 文件包含对 .obj 文件的引用,链接器仍会抱怨它找不到该文件,someLib.obj
可能是因为它没有给出完整路径来了解映射所指的文件。
在链接器脚本中为链接器提供完整路径似乎也不起作用;指定目标文件中包含的符号仍显示在内存的第一部分。
问题
示例链接描述文件中的语法是否有效?第一部分中的通配符会阻止section部分中的指定文件被正确映射吗?
如何指定链接器将归档文件中的某些目标文件映射到特定区域?这甚至可能吗?