我有這樣的目錄結構
dir1
one.c
two.c
dir2
three_main.c
four.c
我需要從所有 c 檔案中創建一個共享庫,并從libdir1.so所有c檔案中創建dir1
一個可執行檔案以及my_exedir2libdir1.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
現在我的問題是......
- 我應該在或兩者中使用-fPIC和-fPIE嗎?
step1step2 - 我可以在創建.so檔案時使用-fPIE嗎?
step2 - 我可以在創建可執行檔案時使用-fPIC嗎?
step1 - 如何在創建.so和可執行檔案時使用RELRO編譯器選項?
謝謝
uj5u.com熱心網友回復:
我應該在 step1 或 step2 中使用 -fPIC 和 -fPIE 還是兩者都使用?
不。您當前構建.so二進制檔案的方式是正確/最佳的。
我可以在步驟 2 中使用 -fPIE 創建 .so 檔案嗎?
你可以,但你不應該:-fPIE是一個編譯時選項,你只是在第 2 步中鏈接。如果您傳遞-fPIE到鏈接,它將被忽略。
我可以在步驟 1 中使用 -fPIC 創建可執行檔案嗎?
你可以,但這會在可執行檔案中創建次優代碼。
如何在創建 .so 和可執行檔案時使用 RELRO 編譯器選項?
添加-Wl,-z,relro.
我應該使用 -z,now 和 -Wl,-z,relro 來有效嗎?
是的:為了最大限度地硬化,你應該這樣做。-Wl,-z,relrowithout-z,now不是無效,但效果較差。詳情。
我可以將relro 用于二進制和.so 嗎?
是的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/457194.html
上一篇:c語言記憶體泄漏的原因是什么?
下一篇:獲取文本msgid為空
