我正在尝试编写一个基于控制台的应用程序来访问Mac OS X 10.7.5上的佳能相机。我正在使用XCode版本4.6。这是我想写的程序
#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”。
佳能EDSDK随附的样品工作正常。所用SDK的版本是佳能于2006年至2007年在06-03-16更新的版本。我没有其他版本信息。
以下是日志转储:http://pastebin.com/vfDWeZnr
我可能做错了什么?
我是Objective-C的新手,因此混淆了C和Objective-C代码。
谢谢!
答案 0 :(得分:0)
您确定不需要初始化cameraList
吗?我想这个函数想要写入你提供的地址但指向NULL
,因此错误。在C中,我在这里使用malloc()
来获取指针,但我不知道Objective-C的等价物。