amiwrong123 最近的时间轴更新
amiwrong123

amiwrong123

V2EX 第 417414 号会员,加入于 2019-06-01 12:17:41 +08:00
这个味道,是BUG的味道!
根据 amiwrong123 的设置,主题列表被隐藏
二手交易 相关的信息,包括已关闭的交易,不会被隐藏
amiwrong123 最近回复了
@ssr94cup #7
就是没有想到 固定方式,还是用你的那种方式吧。
@Rennen #15
@docx #7
好的,我看 PayPal 还区分 国内版 PayPal 和国际版 PayPal ,是不是 买 vps 的场景,用国内版 PayPal 就可以了。

PS:而且貌似,我只能去 注册为 国内版 PayPal 的
@ssr94cup #4
算了,还是不靠谱的。因为没法固定。而且效果不一定有 风扇对着吹 好。
@ssr94cup #4
老哥,有人提到,可以用这种 m.2 散热器 加到 散热马甲上,这玩意加上去,那不比 小风扇 给力多了

![]( https://s3.bmp.ovh/imgs/2025/03/06/22aabdecc1665590.png)
@mahaoqu #10
是的,我决定使用 gcc 了。ld 感觉是要底层一点,有些东西还是让 gcc 帮我处理吧。

门道确实不少,我刚才自己对比了, 各种情况下的 mapfile(-Map 参数)发现里面找到的 libxxx.a 的 名字和路径 都不一样。而且这个 mapfile 内容很多,我只看了一点点,后面有空再慢慢研究了。
先介绍下背景:不管是用 ld 还是 gcc ,都有这些参数-nostartfiles -nostdlib -static --start-group -lnosys -specs=nosys.specs -specs=nano.specs -lgcc -lc --end-group -gc-sections
-----------
这段话修正一下:
如果是 ld ,则携带-nostartfiles -nostdlib -static --start-group -lnosy -lgcc -lc --end-group -gc-sections
如果是 gcc ,则携带-nostartfiles -nostdlib -static --start-group -lnosys -specs=nosys.specs -specs=nano.specs -lgcc -lc --end-group -gc-sections
@diivL #1
@mahaoqu #2
@seers #3
@sir283 #4

感觉之前的回答啦,现在又遇到了一个问题:

先介绍下背景:不管是用 ld 还是 gcc ,都有这些参数-nostartfiles -nostdlib -static --start-group -lnosys -specs=nosys.specs -specs=nano.specs -lgcc -lc --end-group -gc-sections

首先还是用 ld 来进行编译,编译能够完成,但会报一些链接器的警告( https://stackoverflow.com/questions/73742774/gcc-arm-none-eabi-11-3-is-not-implemented-and-will-always-fail 类似这个链接里的报的警告):
warning: _close is not implemented and will always fail ,还有_fstat _getpid _satty _kill _lseek _read _write 。
然后我又去查看了反汇编,发现里面有了一些我不想要的东西,居然还有什么 raise 函数、raise_r 函数的代码,还有一些其他的函数的代码,即使我都没有进行调用的。而且吧,我是加了-gc-sections ,居然还是没有 gc 掉。

然后我换成 gcc 来编译,还是携带相同的参数,ld 的参数,我就用,Wl 来传递。还是发现会报这些警告。
PS:我发现 gcc 有一个方便的地方,就是不像 ld 必须要使用-L 参数指定搜索库的路径。gcc 可以不指定这些路径,它自己会去找。

最终,我使用 gcc 并携带了--specs=nosys.specs --specs=nano.specs ,发现终于不报这些警告了。而且查看 dis 文件,发现也干净了很多,没有 raise 函数(以及其他的乱七八糟没用到的函数)的汇编在里面了。但是呢,却发现多了一些奇怪的 section (从 dis 文件里看):.bss.__malloc_free_list .bss.__malloc_sbrk_start .bss.errno .bss.__lock__malloc_recursive_mutex

最终,我因为不想看到这些烦人的警告,还是选择了这个命令
gcc -nostartfiles -nostdlib -static -Wl,--start-group -lnosys -specs=nosys.specs -specs=nano.specs -lgcc -lc -Wl,--end-group -Wl,-gc-sections

但上面这些现象的原因我还是很懵,各位大佬有空可以帮忙看看。现在我先解决问题,后面我也研究研究。
@opengps #16
这已经 这个小县城的 最大的营业厅了。
@lonjin #13
这。。退个宽带,还得认识人才能解决了呗。。
@diivL #1
@mahaoqu #2
@seers #3
@sir283 #4
各位大佬,又遇到了一个奇怪的问题。还是我帖子说的这种场景,我用 ld 编译的时候,会报错奇怪的 undefined reference to 。
https://blog.csdn.net/qq_24341965/article/details/73928434

我根据这篇博客的灵感,我就 调整命令参数之间的顺序,发现了如下规律:
- $(OBJECTS)是 Makefile 变量,是多个 o 文件空格隔开
- ld 命令后,如果是$(OBJECTS) --start-group -lnosys -lc -lgcc --end-group ,就不会报错 undefined reference to
- ld 命令后,如果是--start-group -lnosys -lc -lgcc --end-group $(OBJECTS),就会报错 undefined reference to

ld 命令当然还有其他参数,但其他的都不影响报错,我就忽略了。

虽然问题已经解决了,但是还是感觉不可思议,可以解下惑吗
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5621 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 10ms · UTC 01:32 · PVG 09:32 · LAX 18:32 · JFK 21:32
Developed with CodeLauncher
♥ Do have faith in what you're doing.