我在编译micropython时提示的错误如下:
> scons -j 4
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: warning: you do not seem to have the pywin32 extensions installed;
parallel (-j) builds may not work reliably with open Python files.
File "D:\rt-thread\env\tools\Python27\Scripts\scons.py", line 204, in <module>
scons: Building targets ...
scons: building associated VariantDir targets: build
LINK rt-thread.elf
build\kernel\components\libc\libdl\dlmodule.o: In function `rt_system_dlmodule_init':
D:\rt-thread\RTOS_SDK\components\libc\libdl/dlmodule.c:825: undefined reference to `__rtmsymtab_start'
D:\rt-thread\RTOS_SDK\components\libc\libdl/dlmodule.c:825: undefined reference to `__rtmsymtab_end'
collect2.exe: error: ld returned 1 exit status
scons: *** [rt-thread.elf] Error 1
scons: building terminated because of errors.
我不知道是启动了micropython的哪个功能启动了libc的编译导致了这个问题。
必须在boardlinker_scriptslink.ids中添加如下代码才能编译通过:
/* section information for modules */
. = ALIGN(4);
__rtmsymtab_start = .;
KEEP(*(RTMSymTab))
__rtmsymtab_end = .;
但是这句话为什么原始的bsp中没有,为什么要加,加了会有什么效果呢?
你好 关于你之前反馈的问题头文件缺失的问题,已经于昨天修正,今天凌晨已经同步至中国大陆镜像源,你如果重新拉取最新版的应该就没问题了
你确认一下你是不是把dlmodule给开开了,这个功能不应该会被强制选定,应该是手动选定的,不要选这个:
如果发现micropython有什么问题,也可以到https://github.com/RT-Thread-packages/micropython 这个仓库的issue反馈,最好要用latest版本,官方打版本速度很慢,所以有可能最新版已经解决了,你用发布版还是有问题。
system_table可以在文档中心搜索一下,讲的很详细
必须在boardlinker_scriptslink.ids中添加如下代码才能编译通过:
/* section information for modules */
. = ALIGN(4);
__rtmsymtab_start = .;
KEEP(*(RTMSymTab))
__rtmsymtab_end = .;
但是这句话为什么原始的bsp中没有,为什么要加,加了会有什么效果呢?
针对这个问题,我的猜想:
应该就是新的版本引入了对__rtmsymtab_start与__rtmsymtab_end的引用;
这两个变量在链接脚本里面定义的,本质就是定义了两个地址变量,可以理解成uint32_t __rtmsymtab_start, __rtmsymtab_end;
;
但他们有点不同的是,他是带了确定的值的,这个取决于它写在链接脚本的什么位置;
__rtmsymtab_start = .; //当前的地址值,赋值给__rtmsymtab_start
KEEP(*(RTMSymTab)) //中间一堆的section
__rtmsymtab_end = .; //当前的地址值(已经累上去了,值变了),赋值给__rtmsymtab_end
这块知识需要对链接脚本的语法有点了解才行。
至于为何旧版本不用写在链接脚本里面,应该是旧版本就没有引用过这两个变量;自然就不会报他们没定义。
这个是无法被取消,不知道选了什么导致的。