unix – Gold无法从静态库创建可重定位目标文件
发布时间:2020-12-15 20:55:04 所属栏目:安全 来源:网络整理
导读:让我先说一下,我是一个与接头有关的事情的菜鸟.如果我说的话似乎没有意义,那可能不会 – 请打电话给我. 我有以下文件: 酒吧 #[no_mangle]pub extern fn bar(x: isize) - isize { x + 1 } foo.c extern int bar(int);extern int baz(int);int foo(int x) { r
让我先说一下,我是一个与接头有关的事情的菜鸟.如果我说的话似乎没有意义,那可能不会 – 请打电话给我.
我有以下文件: >酒吧 #[no_mangle] pub extern fn bar(x: isize) -> isize { x + 1 } > foo.c extern int bar(int); extern int baz(int); int foo(int x) { return bar(x) + baz(x); } 我可以将这些链接到一个可重定位目标文件中: $rustc --crate-type=staticlib bar.rs -o bar.a $gcc -c foo.c -o foo.o $ld -r foo.o bar.a -o out.o 我不确定引擎盖下发生了什么,但我确实得到了我想要的输出:bar和foo是定义而baz不是. $nm out.o | grep '(foo|bar|baz)$' 0000000000000000 T bar U baz 0000000000000000 T foo 如果我用ld.bfd替换ld,就会发生同样的事情.然而,事情与ld.gold分道扬.. $ld.gold -r foo.o bar.a -o out.o ld.gold: internal error in set_info_section,at ../../gold/output.h:3198 这与ld.gold和binutils 2.24和2.26一起打包. binutils 2.30仍存在问题,尽管我获得的行号不同: $ld.gold -r foo.o bar.a -o out.o ld.gold: internal error in set_info_section,at ../../gold/output.h:3386 此外,即使使用–emit = obj而不是–crate-type = staticlib,错误仍然存??在 所以: >错误是什么意思? 解决方法
Reported here.事实证明这已经在trunk中修复了,所以我想解决方案是等到binutils 2.31(或从头开始构建binutils).
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |