2009-08-11 18 views
0

關於編譯的參考文獻this question。我不明白我的Mac程序如何使用正確的-arch,用這些-arch標誌編譯,-arch標誌用於我所在的系統(ppc64 g5),並且仍然產生錯誤的目標代碼。另外,如果我使用了一個交叉編譯器並且在Linux上爲Mac生成了10.5代碼,那麼這與我上面描述的有什麼不同呢?如何爲錯誤的系統編譯目標代碼並交叉編譯問題?

背景是,我試圖編譯各種Apache模塊。他們用-arch ppc,ppc64等進行編譯。我沒有遇到任何錯誤,我得到了我的mod_whatever.so。但是,Apache總是會抱怨沒有找到某個符號。顯然,它與編譯器產生的內容有關,即使文件類型表示它是用於ppc,ppc64,i386,x_64(通用二進制),並且似乎與我擁有的所有其他.so mod相匹配。

我想我不明白它如何編譯我的系統沒有問題,然後說我的系統無法使用它。也許我不明白編譯器實際上給了我什麼。

編輯:所有的錯誤信息和完整的過程可以看到here

謝謝。

+0

您需要更具體。您看到了什麼錯誤信息? – 2009-08-11 18:02:20

回答

1

看着其他線程和其他地方,沒有G5或OSX服務器安裝,我只能提出一些意見和建議,但也許他們會幫助。

  1. 這通常不是一個好主意,可以修改O/S供應商的安裝的軟件。安裝一個新的Apache模塊比覆蓋現有的庫更容易出問題,但是你仍然處於供應商的擺佈之中,因爲軟件更新可能會刪除你的修改,除此之外,你必須弄清楚供應商的版本是如何建於第一位。 OS X世界的一個常見做法是通過使用例如MacPorts完全獨立安裝開源產品(如Apache)來避免這種情況。這也有它的缺點:爲了實現高度的獨立性,MacPorts經常會下載和構建許多已經在OS X中的東西的依賴包,但除了一些額外的構建週期和磁盤空間之外,沒有其他損害。

  2. 也就是說,應該可以構建和安裝apache模塊來補充Apple提供的模塊。 Apple確實發佈了它對開源產品所做的更改here;您可以在其中找到各種版本,以查找包含源代碼,Makefile和應用修補程序的apache目錄。這可能有幫助。

  3. 請確保您構建的mod _ *。是真正的64位,並且不依賴於任何非64位庫。使用otool -L mod_*.so來查看每個引用的動態庫,然後在這些庫上使用file以確保它們都具有ppc64變體。

  4. 確保您使用的是最新的開發者工具(Xcode 3.1.3是最新的)。

  5. 儘管開發人員工具鏈使用了許多開源組件,但Apple增強了其中的許多組件,並且OS X的ABI,通用二進制支持,動態庫等存在很大差異。底線是交叉編譯Linux(或任何其他非OS X平臺)上的OS X目標對象代碼既不受支持也不實用。