У меня есть такая структура каталогов
dir1
one.c
two.c
dir2
three_main.c
four.c
Мне нужно создать общую библиотеку libdir1.so
из всех файлов с в dir1
и исполняемый файл my_exe
из всех файлов с в dir2
вместе с libdir1.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
или в обоих?step2
при создании файла .так?step1
при создании исполняемый?Спасибо
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
— это опция времени компиляции, и вы только связываетесь на шаге 2. Если вы передадите -fPIE
ссылку, она будет проигнорирована.
Can I use -fPIC in step1 in creating the executable?
Вы могли бы, но это создаст неоптимальный код в исполняемом файле.
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?
Да: для максимального закаливания следует. -Wl,-z,relro
без -z,now
не является неэффективный, но действует меньше. Подробности.
can I use relro for both binary and .so?
Да.
Большое спасибо за ответ, должен ли я использовать
-z,now
вместе с-Wl,-z,relro
, чтобы быть эффективным? и могу ли я использоватьrelro
как для бинарный, так и для .так?