我正試圖編寫基於控制檯的應用程序來訪問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代碼混淆了。
謝謝!
EdsGetCameraList函數爲我做。所有的示例代碼遍佈互聯網,使用相同的初始化形式。它們將其初始化爲NULL並調用該函數。如果你覺得我還是錯的,請糾正我。 – niting 2013-04-10 08:03:07
你從哪裏找到該代碼?在你的日誌的第124行有這個:'dlopen(NULL,0x00000110)'。這意味着你試圖在路徑NULL處打開一個動態庫,這顯然是無稽之談。所以我想知道如何才能爲寫文檔的人工作。 – 2013-04-10 12:52:33
奇怪的是,我停止使用LLVM的Xcode,並使用g ++轉移到Vim,編譯並運行得很好。我不知道爲什麼發生這種情況,可能是因爲編譯標誌或類似的東西。 – niting 2013-04-15 05:32:15