Linux 使用“编译可执行文件”-fPIC“;标志(无共享库)

Linux 使用“编译可执行文件”-fPIC“;标志(无共享库),linux,gcc,makefile,fpic,Linux,Gcc,Makefile,Fpic,我目前正在处理一些遗留软件包,我看到一些Makefiles使用-fPIC标志来编译最终的可执行文件 我的理解是,这是在创建共享库时使用的,在创建可执行文件时使用它是没有意义的 我想知道我是对的还是遗漏了什么,因为当我在互联网上搜索时,我只得到关于共享库的结果,而不是可执行文件 谢谢,它可以用来构建位置独立的可执行文件,由于ASRL,这可以带来更好的安全性。但是,您应该使用-fpie和-pie: cc -c -fpie foo.c -o foo.o cc -pie foo.o -o foo

我目前正在处理一些遗留软件包,我看到一些
Makefile
s使用
-fPIC
标志来编译最终的可执行文件

我的理解是,这是在创建共享库时使用的,在创建可执行文件时使用它是没有意义的

我想知道我是对的还是遗漏了什么,因为当我在互联网上搜索时,我只得到关于共享库的结果,而不是可执行文件


谢谢,

它可以用来构建位置独立的可执行文件,由于ASRL,这可以带来更好的安全性。但是,您应该使用
-fpie
-pie

cc -c -fpie foo.c -o foo.o
cc    -pie  foo.o -o foo

位置无关代码在共享库上下文之外可能很有用。一种常见的情况是,这使得最终的可执行文件更安全地抵御代码注入攻击


在一些发行版中,例如,大多数软件包都是以饼图的形式构建的。

查看维基百科,了解可能的原因:谢谢!这很有趣,虽然我正在查看的应用程序的makefile并没有那么敏感(小型测试应用程序),所以我认为他们只是错误地添加了该标志:)(例如复制粘贴)理论上,该标志在某些架构上可能很有用,否则这些架构将默认定位依赖代码,但由于某些原因无法链接。不解释-fPIC,仅-fPIE。谢谢!我也会看看这个标志,尽管我认为这个软件包并不真的需要这个功能。