2013-10-14 55 views
1

我正在構建一個iPhone應用程序,我需要位置獨立。我鏈接的是我沒有源代碼的第三方庫。靜態鏈接對非pic第三方庫

  1. 如果這樣的庫尚未編譯-fPIC,因此不是位置無關,我還可以鏈接反對出示有效PIE二進制?

  2. 動態加載器是否可以處理由於此庫中的代碼而發生的任何文本重定位。

  3. 如果不是,我的可能選擇是什麼來解決這種情況,仍然會產生一個PIE二進制文件?

回答

-1

據我所知,一個源文件是否與-fPIC或不建,除非你打算創建一個動態庫出目標文件並不重要。實際上,大多數靜態庫不是以位置獨立的方式構建的。並不是說這是被禁止的,但是稍後會導致稍微更大和更慢的二進制(因爲編譯器/鏈接器將不能執行某些類型的優化)。

而一個二進制運行在它自己的地址空間中,它並不一定是位置獨立的。這就是爲什麼動態庫必須在位置上獨立的原因,因爲它們在不同的二進制文件之間共享,這些二進制文件都需要不同的內存位置,因此動態鏈接程序必須能夠在運行時將庫移動到二進制文件的其他位置。

或者用更簡單的話來說:只需鏈接到靜態庫,一切都會好的。