2011-04-01 44 views
1

我正在編寫一個具有gcc 4.2版的MAC OSX 10.6示例應用程序。 我正在編譯使用gcc版本4.2的應用程序。 它在同一臺機器上正常工作,但在MAC OSX 10.5(gcc 4.0)上工作不正常。 我怎樣才能編譯它在10.6,所以它也可以在舊機器上工作?從新的mac機創建舊mac的應用程序?

我得到這些錯誤

dyld: unknown required load command 0x80000022 
Trace/BPT trap 

命令我用來建立被

gcc -m32 main.cc 
+0

你用手工或通過IDE編譯? – Macmade 2011-04-01 06:30:35

+0

不使用,gcc -m32標誌。 – 2011-04-01 06:36:40

回答

1

-arch i386 -Wl,-macosx_version_min,10.5將幫助;不過,我不確定它們是否足夠。

+0

如果產生警告,則OP需要發佈警告,以便我們解決任何問題。 – 2011-04-01 06:33:39

+0

@Rafe 我得到 dyld:未知的所需加載命令0x80000022 跟蹤/ BPT陷阱 – 2011-04-01 06:48:13

+0

是否有或沒有上面的'-Wl'選項?沒有它,鏈接器將確實使用10.5不會理解的加載命令;上面的'-Wl'選項應該強制它使用10.5理解的加載命令。 – geekosaur 2011-04-01 06:52:26

2

該應用程序在10.5機器的OS X 10.6機器上被錯誤地構建。開發人員可以通過考慮三件事情解決這個問題:

otool -l二進制

Using the correct compiler parameters: 
gcc-4.2 -mmacosx-version-min=10.5 -isysroot /Developer/SDKs/MacOSX10.5.sdk ... 

Using the correct linker settings (setting environment variable before link command). This is required, so that the OS X 10.6 linker will not use the loader command 'LC_DYLD_INFO_ONLY' (=0x80000022), because OS X 10.5 does not understand this command: 

export MACOSX_DEPLOYMENT_TARGET=10.5 
(or setenv MACOSX_DEPLOYMENT_TARGET=10.5) 

固定在此之後,可以通過運行「otool」檢查應用程序的OS X 10.5正確建立

正確的二進制文件不應包含任何'LC_DYLD_INFO_ONLY'加載命令(僅限'LC_DYLD_INFO'命令)。

(見我的博客文章http://grauonline.de/wordpress/?p=71