2013-04-10 28 views
2

我正試圖編寫基於控制檯的應用程序來訪問Mac OS X 10.7.5上的佳能相機。我正在使用XCode 4.6版本。這是我想寫Canon EDSDK在Mac OS 10.7.5上使用EXC_BAD_ACCESS在非常基本的程序上崩潰

#import <Foundation/Foundation.h> 
#include "EDSDK.h" 
#include "EDSDKErrors.h" 
#include "EDSDKTypes.h" 


int main() 
{ 
    @autoreleasepool { 
     EdsError error = EDS_ERR_OK; 
     EdsCameraListRef cameraList = NULL; 
     EdsUInt32 count = 0; 
     EdsDeviceInfo deviceInfo; 
     bool isSDKLoaded; 

     // Initialization of SDK 
     error = EdsInitializeSDK(); 

     //Acquisition of camera list 
     if(error == EDS_ERR_OK) 
     { 
      isSDKLoaded = YES; 
      error = EdsGetCameraList(&cameraList); 
     } 
     if(cameraList != NULL) { 
      EdsRelease(cameraList); 
      cameraList = NULL; 
     } 

    } 
    return 0; 
} 

它編譯成功,但是當我運行該程序崩潰的EdsGetCameraList函數返回時的程序。顯示的錯誤是'dyld misaligned_stack_error'。我知道這與MacOS X希望堆棧爲16字節對齊的事實有關。我使用的SDK僅適用於32位體系結構,因此我已經相應地設置了體系結構。我嘗試在XCode的Build Settings下設置「Other C flags」,以包含標誌「-falign-stack = assume-16-byte」。

Canon EDSDK附帶的示例正常工作。正在使用的SDK版本是由Canon於2006年3月6日更新於06-03-16開發的版本。我沒有其他的版本信息。

以下是從日誌轉儲:http://pastebin.com/vfDWeZnr

我應該怎麼做來可能做錯了什麼?

我對Objective-C非常陌生,因此C和Objective-C代碼混淆了。

謝謝!

回答

0

您確定不需要初始化cameraList?我想這個函數想要寫入你提供的地址,但是指向NULL,因此錯誤。在C我在這裏使用malloc()來獲得一個指針,但我不知道Objective-C的等價物。

+0

EdsGetCameraList函數爲我做。所有的示例代碼遍佈互聯網,使用相同的初始化形式。它們將其初始化爲NULL並調用該函數。如果你覺得我還是錯的,請糾正我。 – niting 2013-04-10 08:03:07

+0

你從哪裏找到該代碼?在你的日誌的第124行有這個:'dlopen(NULL,0x00000110)'。這意味着你試圖在路徑NULL處打開一個動態庫,這顯然是無稽之談。所以我想知道如何才能爲寫文檔的人工作。 – 2013-04-10 12:52:33

+0

奇怪的是,我停止使用LLVM的Xcode,並使用g ++轉移到Vim,編譯並運行得很好。我不知道爲什麼發生這種情況,可能是因爲編譯標誌或類似的東西。 – niting 2013-04-15 05:32:15

相關問題