|
请教RT-Therad finsh符号导出的问题
这几天在看RT-Thread finsh源代码, 在finsh初始化的时候有这么一段代码:
(略)
#elif defined (__GNUC__) /* GNU GCC Compiler */
extern const int __fsymtab_start;
extern const int __fsymtab_end;
extern const int __vsymtab_start;
extern const int __vsymtab_end;
但是这几个变量我并没找到定义之处, 查了些资料后得知它们是定义在ld链接脚本中的, 知道原理后我打算在电脑上试一下, 于是写了一个简单的测试程序, 按同样的方式声明的外部变量,
然后使用 ld -verbose 得到默认链接脚本, 参考RT-Thread x86的链接脚本, 在里面定义了在程序中声明的变量,
然后使用命令行:
gcc -o test.exe test.c -T ld.lds
进行编译, 其中ld.lds是我增加了变量的默认脚本.
尽管我指定了链接脚本, 但最终结果还是出错: 提示找不到该变量, 就像没有指定链接脚本一样.
后来我打算只使用GCC编译, 然后再使用ld手动指定脚本连接, 不过由于库的依赖很复杂(我对GCC不是很了解), 放弃.
现在我想知道, 在GCC中要使用什么样的参数才能替换掉默认链接脚本, 或者是说我要怎么样在链接脚本中定义变量, 以便在程序中访问到?
我在RT-Thread x86的配置文件中看到rtt也是使用 -T 参数指定链接脚本的, 可是我这样为什么不行呢?
我的环环境: Win7 或者 WinXP, GCC 4.7.1 .
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|