You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置GCC在Arch Linux下默认使用-no-pie选项?

在Arch Linux中配置GCC默认启用-no-pie

遇到GCC默认用-pie导致的链接错误?别担心,在Arch Linux上有几种简单的方法可以让GCC默认启用-no-pie,根据你的需求选就行:

方法1:临时生效(当前终端会话)

如果只是临时测试,不想改动永久配置,可以直接在终端里设置环境变量——GCC会自动读取这些变量作为默认编译/链接参数:

export CFLAGS="-no-pie"
export LDFLAGS="-no-pie"

这个设置只在当前终端窗口有效,关闭终端后就会恢复默认,适合临时调试场景。

方法2:全局永久生效(所有用户)

如果想让所有用户的GCC都默认用-no-pie,可以修改Arch系统的全局编译配置文件/etc/makepkg.conf:

  1. 用文本编辑器打开配置文件(需要管理员权限):
    sudo nano /etc/makepkg.conf
    
  2. 找到CFLAGS和LDFLAGS这两行,把其中的-pie替换成-no-pie;如果原来的参数里没有-pie,直接在末尾添加 -no-pie(注意前面要加空格)。
    举个修改后的示例:
    CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt -no-pie"
    LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -no-pie"
    
  3. 保存并退出编辑器(nano中按Ctrl+O保存,Ctrl+X退出)。
  4. 之后新启动的终端都会自动应用这个配置,所有用户的GCC编译都会默认带上-no-pie。

方法3:用户个人永久生效(仅当前用户)

如果不想影响其他用户,只给自己的账号配置默认-no-pie,可以修改shell的配置文件(bash用~/.bashrc,zsh用~/.zshrc):

  1. 打开配置文件:
    nano ~/.bashrc
    
  2. 在文件末尾添加两行:
    export CFLAGS="-no-pie"
    export LDFLAGS="-no-pie"
    
  3. 保存退出后,执行下面的命令让配置立即生效:
    source ~/.bashrc
    
    以后每次登录你的账号,这个配置都会自动加载。

验证配置是否生效

写个简单的测试程序test.c:

#include <stdio.h>
int main() {
    printf("Hello World!\n");
    return 0;
}

用GCC编译:

gcc test.c -o test

然后用file命令查看生成的可执行文件类型:

file test

如果输出里没有PIE executable,而是显示ELF 64-bit executable(动态或静态链接),就说明-no-pie已经默认生效了。

注意事项

修改全局makepkg.conf会影响所有系统包和AUR包的构建,有些软件可能依赖PIE特性,所以如果只是自己写的程序需要-no-pie,优先用用户个人配置或临时配置,避免破坏系统包的兼容性。

内容的提问来源于stack exchange,提问作者Aadit M Shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:08:10