2011-11-08 108 views
3

我在Xcode中構建了一個集成了ffmpeg dylib的Cocoa項目。它在Mac OSX 10.6和10.7上運行良好,但在10.5上崩潰。我正在編譯10.6。有什麼建議麼?謝謝!在Mac OSX 10.5(但不是10.6或10.7)上ffmpeg dylibs崩潰的可可應用

下面是我編譯它:

的./configure --disable靜電--enable-共享 - 禁用outdev = SDL --enable-運行時cpudetect --disable- bzlib --disable-libfreetype --disable-libopenjpeg --enable-zlib --arch = x86_64 --sysroot =/Developer/SDKs/MacOSX10.6.sdk --extra-cflags =「 - isysroot/Developer/SDKs/MacOSX10 .6.sdk -DMACOSX_DEPLOYMENT_TARGET = 10.5 -mmacosx版本分鐘= 10.5"

這裏的崩潰報告:

Process:   MyApp [27963] 
Path:   /Applications/MyApp.app/Contents/MacOS/MyApp 
Identifier:  com.mycompany.MyApp 
Version:   ??? (???) 
Code Type:  X86-64 (Native) 
Parent Process: launchd [66] 

Interval Since Last Report:   123326 sec 
Crashes Since Last Report:   2 
Per-App Interval Since Last Report: 0 sec 
Per-App Crashes Since Last Report: 2 

Date/Time:  2011-11-06 15:29:51.154 -0500 
OS Version:  Mac OS X 10.5.8 (9L31a) 
Report Version: 6 
Anonymous UUID: D86EA304-DCDA-4855-9124-69FE8C5BDE1B 

Exception Type: EXC_BREAKPOINT (SIGTRAP) 
Exception Codes: 0x0000000000000002, 0x0000000000000000 
Crashed Thread: 0 

Dyld Error Message: 
    Library not loaded: @rpath/libavcodec.dylib 
    Referenced from: /Applications/MyApp.app/Contents/MacOS/../Frameworks/MyEngine.framework/Versions/A/MyEngine 
    Reason: no suitable image found. Did find: 
    /Applications/MyApp.app/Contents/Frameworks/MyEngine.framework/Versions/A/Libraries/libavcodec.dylib: unknown required load command 0x80000022 
+0

您是否構建了您要鏈接的ffmpeg庫,或者是否從某些方面下載了它? –

+0

@MichaelDautermann - 我自己建造的 –

回答

1

我相信你遇到的問題是libavcodec在10.5下不能完全兼容64位。我不是100%確定的。

對於大多數我自己的64位本地應用程序,64位支持並沒有完全充實,所以我必須明確告訴O.S.在10.5下運行時運行我的二進制文件的32位版本。

要做到這一點,進入你的Info.plist文件,並添加這些標誌:

<key>LSMinimumSystemVersionByArchitecture</key> 
<dict> 
    <key>i386</key> 
    <string>10.5.0</string> 
    <key>ppc</key> 
    <string>10.5.0</string> 
    <key>x86_64</key> 
    <string>10.6.0</string> 
</dict> 

這將確保您的應用程序在豹機和64位模式32位模式下運行(如果合適的話)在您的10.6 &較新的機器上。

1

在10.6上編譯的二進制文件在較早的OS X版本上無法使用,因爲10.6添加了10.5和更早版本中不支持(不存在)的新的dyld加載命令。

儘管您試圖將-mmacosx-version-min=10.5添加到值得稱道的標誌,但您並未將其添加到鏈接步驟,因此鏈接程序仍然會生成10.6的dyld。

以上是錯誤的原因,但您可能會因使用10.6 SDK而陷入困境 - 如果您想要定位Leopard,您應該真正使用10.5 SDK。如果不使用特定於10.6的功能,使用10.6 SDK可能會在10.5上工作,但如果使用10.6 SDK,則編譯器不會在編譯時警告它們,因爲它們預計會存在。

相關問題