Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我目前正在处理一些遗留包,我看到一些Makefiles 使用该-fPIC标志来编译最终的可执行文件。
Makefile
-fPIC
我的理解是,这是在创建共享库时使用的,在创建可执行文件时使用它是没有意义的。
我想知道我是对的还是我遗漏了什么,因为当我在互联网上搜索时,我只得到关于共享库而不是可执行文件的结果。
谢谢,
与位置无关的代码在共享库上下文之外很有用。一种常见的情况是地址空间布局随机化,它使最终的可执行文件更安全地抵御代码注入攻击。
在几个发行版中,例如Fedora,大多数包都构建为 PIE。
它可以用于构建位置无关的可执行文件,这可以通过 ASRL 带来更好的安全性。但是,您应该改用-fpieand -pie:
-fpie
-pie
cc -c -fpie foo.c -o foo.o cc -pie foo.o -o foo