如何正确使用 -fPIC 和 -fPIE GCC 选项
How to use -fPIC and -fPIE GCC options correctly
我有这样的目录结构
dir1
one.c
two.c
dir2
three_main.c
four.c
我需要在 dir1
中的所有 c 文件中创建一个共享库 libdir1.so
dir2
中所有 c 文件中的可执行文件 my_exe
以及 libdir1.so
我正在分两步创建 .so 和 可执行文件。
.so step1: gcc -c -fPIC -g -O2 -pthread -o one.o one.c
gcc -c -fPIC -g -O2 -pthread -o two.o two.c
.so step2: gcc -shared -g -O2 -pthread -o libdir1.so one.o two.o
exe step1: gcc -c -fPIE -o three_main.o three_main.c
gcc -c -fPIE -o four.o four.c
exe step2: gcc -Wall -g -L -ldir1 -o my_exe three_main.o four.o
现在我的问题是......
- 我应该在
step1
或 step2
中还是在两者中使用 -fPIC 和 -fPIE?
- 我可以在
step2
中使用 -fPIE 创建 .so 文件吗?
- 我可以在
step1
中使用 -fPIC 创建 可执行文件 吗?
- 如何使用 RELRO 编译器选项来创建 .so 和 executable?
谢谢
Should I use -fPIC and -fPIE in step1 or step2 or in both?
没有。您当前构建 .so
和二进制文件的方式是正确的/最佳的。
Can I use -fPIE in step2 in creating the .so file?
你可以,但你不应该:-fPIE
是一个 compile-time 选项,你只是 link 在步骤 2 中。如果将 -fPIE
传递给 link,它将被忽略。
Can I use -fPIC in step1 in creating the executable?
您可以,但这会在可执行文件中创建 sub-optimal 代码。
How can I use RELRO compiler option in creating both .so and executable?
添加-Wl,-z,relro
.
should I be using -z,now along with -Wl,-z,relro to be effective?
是的:为了最大限度地强化,你应该这样做。没有 -z,now
的 -Wl,-z,relro
不是 无效 ,而是 较少 有效。 Details.
can I use relro for both binary and .so?
是的。
我有这样的目录结构
dir1
one.c
two.c
dir2
three_main.c
four.c
我需要在 dir1
中的所有 c 文件中创建一个共享库 libdir1.so
dir2
中所有 c 文件中的可执行文件 my_exe
以及 libdir1.so
我正在分两步创建 .so 和 可执行文件。
.so step1: gcc -c -fPIC -g -O2 -pthread -o one.o one.c
gcc -c -fPIC -g -O2 -pthread -o two.o two.c
.so step2: gcc -shared -g -O2 -pthread -o libdir1.so one.o two.o
exe step1: gcc -c -fPIE -o three_main.o three_main.c
gcc -c -fPIE -o four.o four.c
exe step2: gcc -Wall -g -L -ldir1 -o my_exe three_main.o four.o
现在我的问题是......
- 我应该在
step1
或step2
中还是在两者中使用 -fPIC 和 -fPIE? - 我可以在
step2
中使用 -fPIE 创建 .so 文件吗? - 我可以在
step1
中使用 -fPIC 创建 可执行文件 吗? - 如何使用 RELRO 编译器选项来创建 .so 和 executable?
谢谢
Should I use -fPIC and -fPIE in step1 or step2 or in both?
没有。您当前构建 .so
和二进制文件的方式是正确的/最佳的。
Can I use -fPIE in step2 in creating the .so file?
你可以,但你不应该:-fPIE
是一个 compile-time 选项,你只是 link 在步骤 2 中。如果将 -fPIE
传递给 link,它将被忽略。
Can I use -fPIC in step1 in creating the executable?
您可以,但这会在可执行文件中创建 sub-optimal 代码。
How can I use RELRO compiler option in creating both .so and executable?
添加-Wl,-z,relro
.
should I be using -z,now along with -Wl,-z,relro to be effective?
是的:为了最大限度地强化,你应该这样做。没有 -z,now
的 -Wl,-z,relro
不是 无效 ,而是 较少 有效。 Details.
can I use relro for both binary and .so?
是的。