最近在需要用一个叫live2d的c++库,倒入到xcode工程中编译报错,求指点

yuan 发布于 2014年01月13日
无人欣赏。

如题,我已经把appdelegate改成了mm,依然报很多错误, 主要有两个:(1)‘operator new’ takes type size_t ('unsigned long') as first parameter (2) No matching function for call to 'operator new' 对c++了解很少,求高手指点

共18条回复
yuan 回复于 2014年01月13日

无从下手中。。。。

yuan 回复于 2014年01月13日

等待中。。。。。

董一凡 回复于 2014年01月13日

你把出错的地方贴出来,应该是64位和32位的原因。我看看,教你怎么改

玉楼 回复于 2014年01月13日

C++中有new,object-c中没有。

玉楼 回复于 2014年01月13日

俺刚才说的不对了。C++中的new相关于为对象分配了内存后自动调用构造函数。形式如下:

CMyClass *obj = new CMyClass;

而Object-C中的new相当于alloc和init的组合调用。

MyObject *obj = [MyObject new];
// 等价于
MyObject *obj = [[MyObject alloc] init];
yuan 回复于 2014年01月13日

3楼 @董一凡 alt text

非常感谢

yuan 回复于 2014年01月13日

5楼 @玉楼 我很少用new

董一凡 回复于 2014年01月13日

5楼 @玉楼 他这个问题和obj-c没关系,如果文件是mm后缀,是可以混合编译c++和obj-c的

董一凡 回复于 2014年01月13日

6楼 @yuan 你把l2d_size_t的声明打出来我看看,xcode里按住command点击应该能跳转过去

yuan 回复于 2014年01月13日

9楼 @董一凡 #if defined(L2DTARGETIPHONE) || defined(L2DTARGETIPHONEES2) || defined(L2DTARGETMACOSX) typedef unsigned long l2dsizet ;
#elif defined(L2DTARGETPS4) typedef unsigned long l2dsizet ;
#else typedef unsigned int l2dsizet ;
#endif

这是库里的内容,可以改么

董一凡 回复于 2014年01月13日

不可以改,你根据自己的工程类型加个编译选项看看, L2DTARGETMACOSX 或者 L2DTARGETIPHONE

yuan 回复于 2014年01月13日

11楼 @董一凡 不好意思啊,“根据自己的工程类型加个编译选项”是什么意思?是需要改Build settings里的某项设置么?

董一凡 回复于 2014年01月13日

你这个代码很奇怪,operator new的参数是要求必须是size_t,你把lib的地址给我,我去看看怎么回事。这个lib是你自己编译的,还是直接下下来就可以用的

yuan 回复于 2014年01月14日

13楼 @董一凡 非常感谢,http://pan.baidu.com/s/1mg6ZjmC,这个库原来只对日本用户开放,14年刚对全球发布了英文版

董一凡 回复于 2014年01月14日

他里边有sample,你能跑起来吗?我这边把sample跑起来了,看了下,我估计你是忘记填几个宏了,打开工程属性,在building settingApple LLVM 5.0-Preprocessing里,把sample里的对应的Preprocessor Macros里的选项复制到你的工程里,具体来说,就是debug下增加DEBUG=1 L2D_TARGET_IPHONE,release下增加L2D_TARGET_IPHONE

yuan 回复于 2014年01月14日

15楼 @董一凡 sample可以跑起来,我现在想新建一个工程把库导入进来。已经把Apple LLVM 5.0-Preprocessing按你说的修改好了,原来报的错误已经通过了,但是又出了一个,如图 alt text

我把我自己建的工程给你看看吧,http://pan.baidu.com/s/1dDABnyx,辛苦啦

董一凡 回复于 2014年01月14日

16楼 @yuan 提示已经很清楚了啊,你的lib目录放的不对,我看了下,你的目录结构和sample不一样,现在工程找lib的方式是你的工程目录往上边两级,但是你的工程里的lib在工程目录里,所以你去把Search Paths里的Library Search Paths里的debug改成$(SRCROOT)/lib/$(CONFIGURATION)-$(PLATFORM_NAME), release改成$(SRCROOT)/lib/$(CONFIGURATION)-$(PLATFORM_NAME)

yuan 回复于 2014年01月14日

17楼 @董一凡 终于通过了!非常非常非常感谢啊!!我做ios刚刚半年,对building setting里的东西都不甚了解,这次多亏了你的帮助,总之,真心感谢!!!

本帖有18个回复,因为您没有注册或者登录本站,所以,只能看到本帖的10条回复。如果想看到全部回复,请注册或者登录本站。

登录 或者 注册
[顶 楼]
|
|
[底 楼]
|
|
[首 页]