Archlinux 新编译的 gcc 不能和 yasm 一起玩了?

2017-07-14 08:22:10 +08:00
 linux40

尝试了一个之前能链接通过的代码,用新版 gcc 链接后报了错

relocation R_X86_64_32 against `.data' can not be used when making a shared object; recompile with -fPIC

然后重新用 yasm 的-DPIC编译之后,再链接,也不行。。。gcc 会自动链接标准库,所以没用 ld。我在官网看了,两版的 gcc 差别就是

@@ -81,7 +81,9 @@ build() {
       --enable-gnu-indirect-function \
       --disable-multilib \
       --disable-werror \
-      --enable-checking=release
+      --enable-checking=release \
+      --enable-default-pie \
+      --enable-default-ssp

该怎么解决啊。。。

Update: 试了一下,clang 也有问题,是 ld 返回的错误。。。binutils 就多了一行

+    --enable-relro \
2377 次点击
所在节点    Linux
5 条回复
15015613
2017-07-14 08:31:46 +08:00
先降级,过两天等新的 gcc 出来了,再升上去看看,也许问题就解决了
linux40
2017-07-14 08:38:04 +08:00
@15015613 挺麻烦的,gcc、clang、库都要回滚。。。
chih758
2017-07-14 08:58:53 +08:00
aur 里有各种版本的 gcc
wsy2220
2017-07-14 19:11:21 +08:00
应该是--enable-default-pie 导致的,之前加上这个配置选项会没法编内核
linux40
2017-07-15 08:55:52 +08:00
@wsy2220 那怎么解决的呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/375216

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX