亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

gcc編譯參數-fPIC的一些問題

2019-11-10 18:23:33
字體:
來源:轉載
供稿:網友
ppc_85xx-gcc -shared -fPIC liberr.c -o liberr.so-fPIC 作用于編譯階段,告訴編譯器產生與位置無關代碼(Position-Independent Code),  則產生的代碼中,沒有絕對地址,全部使用相對地址,故而代碼可以被加載器加載到內存的任意  位置,都可以正確的執行。這正是共享庫所要求的,共享庫被加載時,在內存的位置不是固定的。gcc -shared -fPIC -o 1.so 1.c這里有一個-fPIC參數PIC就是position independent codePIC使.so文件的代碼段變為真正意義上的共享如果不加-fPIC,則加載.so文件的代碼段時,代碼段引用的數據對象需要重定位, 重定位會修改代碼段的內容,這就造成每個使用這個.so文件代碼段的進程在內核里都會生成這個.so文件代碼段的copy.每個copy都不一樣,取決于 這個.so文件代碼段和數據段內存映射的位置.不加fPIC編譯出來的so,是要再加載時根據加載到的位置再次重定位的.(因為它里面的代碼并不是位置無關代碼)如果被多個應用程序共同使用,那么它們必須每個程序維護一份so的代碼副本了.(因為so被每個程序加載的位置都不同,顯然這些重定位后的代碼也不同,當然不能共享)我們總是用fPIC來生成so,也從來不用fPIC來生成a.fPIC與動態鏈接可以說基本沒有關系,libc.so一樣可以不用fPIC編譯,只是這樣的so必須要在加載到用戶程序的地址空間時重定向所有表目.因此,不用fPIC編譯so并不總是不好.如果你滿足以下4個需求/條件:1.該庫可能需要經常更新2.該庫需要非常高的效率(尤其是有很多全局量的使用時)3.該庫并不很大.4.該庫基本不需要被多個應用程序共享如果用沒有加這個參數的編譯后的共享庫,也可以使用的話,可能是兩個原因:1:gcc默認開啟-fPIC選項2:loader使你的代碼位置無關從GCC來看,shared應該是包含fPIC選項的,但似乎不是所以系統都支持,所以最好顯式加上fPIC選項。參見如下`-shared'     PRoduce a shared object which can then be linked with other     objects to form an executable.  Not all systems support this     option.  For predictable results, you must also specify the same     set of options that were used to generate code (`-fpic', `-fPIC',     or model suboptions) when you specify this option.(1)-fPIC 的使用,會生成 PIC 代碼,.so 要求為 PIC,以達到動態鏈接的目的,否則,無法實現動態鏈接。non-PIC 與 PIC 代碼的區別主要在于 access global data, jump label 的不同。比如一條 access global data 的指令,non-PIC 的形勢是:ld r3, var1PIC 的形式則是:ld r3, var1-offset@GOT,意思是從 GOT 表的 index 為 var1-offset 的地方處指示的地址處裝載一個值,即var1-offset@GOT處的4個 byte 其實就是 var1 的地址。這個地址只有在運行的時候才知道,是由 dynamic-loader(ld-linux.so) 填進去的。再比如 jump label 指令non-PIC 的形勢是:jump printf ,意思是調用 printf。PIC 的形式則是:jump printf-offset@GOT,意思是跳到 GOT 表的 index 為 printf-offset 的地方處指示的地址去執行,這個地址處的代碼擺放在 .plt section,每個外部函數對應一段這樣的代碼,其功能是呼叫dynamic-loader(ld-linux.so) 來查找函數的地址(本例中是 printf),然后將其地址寫到 GOT 表的 index 為 printf-offset 的地方,同時執行這個函數。這樣,第2次呼叫 printf 的時候,就會直接跳到 printf 的地址,而不必再查找了。GOT 是 data section, 是一個 table, 除專用的幾個 entry,每個 entry 的內容可以再執行的時候修改;PLT 是 text section, 是一段一段的 code,執行中不需要修改。每個 target 實現 PIC 的機制不同,但大同小異。比如 MipS 沒有 .plt, 而是叫 .stub,功能和 .plt 一樣??梢姡瑒討B鏈接執行很復雜,比靜態鏈接執行時間長;但是,極大的節省了 size,PIC 和動態鏈接技術是計算機發展史上非常重要的一個里程碑。gcc manul上面有說-fpic        If the GOT size for the linked executable exceeds a machine-specific maximum size, you get an error message from the linker indicating that -fpic does not work; in that case, recompile with -fPIC instead. (These maximums are 8k on the SPARC and 32k on the m68k and RS/6000. The 386 has no such limit.)-fPIC       If supported for the target machine, emit position-independent code, suitable for dynamic linking and avoiding any limit on the size of the global offset table. This option makes a difference on the m68k, PowerPC and SPARC. Position-independent code requires special support, and therefore works only on certain machines.關鍵在于GOT全局偏移量表里面的跳轉項大小。intel處理器應該是統一4字節,沒有問題。powerpc上由于匯編碼或者機器碼的特殊要求,所以跳轉項分為短、長兩種。-fpic為了節約內存,在GOT里面預留了“短”長度。而-fPIC則采用了更大的跳轉項。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产天堂久久综合| 精品视频偷偷看在线观看| 色综合久久中文字幕综合网小说| 777国产偷窥盗摄精品视频| 九九视频直播综合网| 日韩av在线免播放器| 国产福利视频一区二区| 欧美黄色免费网站| 国产亚洲成精品久久| 自拍偷拍亚洲一区| 国产精品在线看| 精品国产欧美成人夜夜嗨| 九九精品在线视频| 中文国产亚洲喷潮| 亚洲精品自拍第一页| 欧美日本精品在线| 午夜精品久久久久久久久久久久| 亚洲伊人第一页| 中文字幕亚洲一区| 国产精品www网站| 国产亚洲欧美视频| 91香蕉嫩草神马影院在线观看| 国产情人节一区| 日韩欧美在线字幕| 日韩中文在线观看| 国产亚洲精品美女久久久久| 欧美精品一本久久男人的天堂| 国产91免费观看| 亚洲欧洲在线看| 久久全国免费视频| 国产香蕉97碰碰久久人人| 91精品久久久久久久久久另类| 九九热精品视频国产| 欧美日韩免费区域视频在线观看| 欧美大片免费看| 川上优av一区二区线观看| 久久婷婷国产麻豆91天堂| 亚洲色图第一页| 免费成人高清视频| 亚洲欧美在线看| 国产综合视频在线观看| 久久久久国色av免费观看性色| 亚洲成av人影院在线观看| 国产精品黄页免费高清在线观看| 欧美日韩亚洲一区二区三区| 国产精品99蜜臀久久不卡二区| 欧美日韩在线免费| 98精品国产高清在线xxxx天堂| 成人在线播放av| 国产精品在线看| 久久综合久久88| 亚洲欧美国产视频| 国产精自产拍久久久久久蜜| 亚洲一区二区三区在线视频| 午夜精品福利在线观看| 欧美猛少妇色xxxxx| 中文字幕亚洲无线码a| 韩国一区二区电影| 国产精品欧美激情在线播放| 亚洲成人av资源网| 亚洲视频在线看| 欧美极品美女视频网站在线观看免费| 国产精品网红福利| 成人激情视频在线播放| 国产精品久久久久久久久久ktv| 国产+成+人+亚洲欧洲| 色爱精品视频一区| 国产日韩换脸av一区在线观看| 久久九九热免费视频| 日韩av网站大全| 亚洲精品免费在线视频| 国产一区私人高清影院| 国内精品久久久久影院 日本资源| 久久青草精品视频免费观看| 欧美日本国产在线| 久久久久国产一区二区三区| 97视频免费观看| 日韩电视剧免费观看网站| 国产福利精品av综合导导航| 国产精自产拍久久久久久| 久久久久这里只有精品| 亚洲一级黄色片| 超碰日本道色综合久久综合| 国产精品视频自在线| 国产精品电影网站| 欧美视频中文在线看| 欧美在线观看网站| 国产成人在线视频| 亚洲视频在线免费观看| 欧美一级淫片videoshd| 8090成年在线看片午夜| 国产精品人成电影| 中文字幕精品一区久久久久| 国产在线拍偷自揄拍精品| 国产乱肥老妇国产一区二| 91精品国产综合久久久久久蜜臀| 九九热r在线视频精品| 亚洲视屏在线播放| 欧美国产日韩一区二区| 成人久久精品视频| 欧美成人精品在线| 欧美理论电影在线播放| 日韩精品亚洲元码| 欧美日韩国产999| 亚洲三级av在线| 国产亚洲精品成人av久久ww| 亚洲国产欧美精品| 性欧美xxxx交| 国产午夜精品视频| 超碰日本道色综合久久综合| 亚洲第一av网站| 亚洲色图17p| 久久久久久久久久久免费精品| 18性欧美xxxⅹ性满足| 亚洲高清久久网| 日韩一区二区在线视频| 国模精品一区二区三区色天香| 精品国产一区二区三区久久久| 91久久久久久久久久久| 日韩精品黄色网| 国产精品十八以下禁看| 欧美激情中文字幕乱码免费| 久久天天躁夜夜躁狠狠躁2022| 亚洲一区二区福利| 国产精品美女免费视频| 日韩中文字幕在线| 亚洲第一福利网站| 久久香蕉精品香蕉| 国语自产精品视频在线看一大j8| 欧美丝袜一区二区三区| 亚洲女人天堂网| 亚洲国产精品国自产拍av秋霞| 国产69久久精品成人| 久久久视频免费观看| 久久精品99久久久久久久久| 精品美女永久免费视频| 日韩精品免费在线观看| 日韩在线视频免费观看高清中文| 亚洲黄页网在线观看| 最近的2019中文字幕免费一页| 国产精品入口夜色视频大尺度| 日韩人体视频一二区| 久久久精品视频在线观看| 2019中文在线观看| 国内精品模特av私拍在线观看| 91av在线免费观看视频| 精品亚洲一区二区三区四区五区| 欧美裸体xxxx极品少妇软件| 欧美中文字幕精品| 最新91在线视频| 成人国产精品久久久久久亚洲| 国产精品美女www| 成人中心免费视频| 国产精品福利片| 有码中文亚洲精品| 国产成人中文字幕| 亚洲理论在线a中文字幕| 日本亚洲精品在线观看| 色哟哟亚洲精品一区二区| 国产精品美乳一区二区免费| 国产精品稀缺呦系列在线| 国产日韩欧美日韩大片| www.久久撸.com| 欧美性开放视频|