标签: objective-c++

如何创建静态库,并且可以在ios中的任何项目上添加.a文件

如何创建静态库,并且可以在ios中的任何项目上添加.a文件.

我试过这样做但是做不到.

提前致谢

xcode static-libraries objective-c++ ios4 ios

17
推荐指数
2
解决办法
5万
查看次数

编译外部C++库以用于iOS项目

我对使用C++库完全不熟悉,所以请理解这可能对我的情况有点具体(让我知道,我可以提供更多细节).

我有一个外部C++库,我正在尝试使用iOS项目.该库遵循configure,make,make构建模式以输出.a库文件.当我尝试将此库文件添加到Xcode时,我收到以下错误:

忽略文件/Users/Developer/iOS/TestProj/libpresage.a,文件是为归档而构建的,而不是被链接的体系结构(i386):

/Users/Developer/iOS/TestProj/libpresage.a

基于这个问题,我尝试将Build Active Architecture Only转为NO,我得到了同样的错误.这让我怀疑我为不正确的架构编译了库.

在.a文件上运行lipo -info给出:

输入文件libpresage.a不是胖文件非胖文件:libpresage.a

是架构:x86_64

鉴于这不是armv7s,armv7或arm64,我尝试使用以下参数再次编译C++库:

1)试试

./configure CC="gcc -arch armv7s" \
                 CXX="g++ -arch armv7s" \
                 CPP="gcc -E" CXXCPP="g++ -E"
Run Code Online (Sandbox Code Playgroud)

编译时出错,我得到:

ld: library not found for -lcrt1.3.1.o
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

2)试试

./configure CC="gcc -arch arm64" \
                 CXX="g++ -arch arm64" \
                 CPP="gcc -E" CXXCPP="g++ -E"
Run Code Online (Sandbox Code Playgroud)

编译时出错,我得到:

ld:警告:ld:警告:忽略文件/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libSystem.dylib,缺少所需的架构arm64 in文件/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libSystem.dylib(2个切片)忽略文件/Applications/Xcode.app/Contents/开发人员/平台/ MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libstdc ++.dylib,在文件/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer中缺少所需的架构arm64 /SDKs/MacOSX10.10.sdk/usr/lib/libstdc++.dylib(2片)

ld:动态主可执行文件必须与libSystem.dylib链接,用于体系结构arm64 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

有什么明显的东西让我失踪吗?

编辑:

感谢您的回复,所以我设法将库作为自定义构建目标放入Xcode,将'make'命令指向库MakeFile.这个构建很好.

我从这里开始:

  • 从Objective C …

c++ xcode objective-c objective-c++ ios

17
推荐指数
2
解决办法
2万
查看次数

如何使用特定的过滤器从其他向量生成std :: vector?

我有一个std::vector充满了物体.我想过滤并复制一些谓词返回的所有元素true到一个新的元素std::vector.

我看过find并且search函数但是它们只返回迭代器.

我正在使用ObjC++,所以我可以使用块函数和仿函数,如果它有帮助的话.但是不能使用C++ 11函数.

c++ stl vector objective-c++

16
推荐指数
2
解决办法
2万
查看次数

适用于iPhone的C vs C++(Objective-C vs Objective-C++)

我想为iPhone创建一个可移植的库,也可以用于其他平台.

我的问题是休息:

有谁知道iPhone上最好用的是什么:Objective-C或Objective-C++?它是否适用于C++与Objective-C与C相同?

理由: Objective-C是C的超集,但Objective-C++ is not是C++ 的超集.

提前致谢!

更新:在同一个用例的实现中,内存使用情况,速度如何?

更新1:如果有人可以提供更多信息,我将受到欢迎.

c c++ iphone objective-c objective-c++

15
推荐指数
4
解决办法
2万
查看次数

使用长度AND编码将const char*string转换为NSString

我想知道哪种方法更好地将const char*string转换为NSString.
我发现有一些事实.

  • [NSString stringWithCString:length:]有点不推荐使用.
  • [NSString stringWithCString:encoding]可能用于我的目的

但我想用长度和编码进行转换(因为如果我通过将编码设置为UTF-8而有一些非ASCII字符,我想要那么好).有什么想法吗?

我现在才想

  1. 使用std :: strncpy(ch1,ch2,len)创建其他char和copy的长度
  2. 使用[NSString stringWithCString:encoding:]

但它效果不好.

c++ cocoa encoding objective-c++

15
推荐指数
2
解决办法
3万
查看次数

Objective-C++中的析构函数

我有一个Objective-C++类,它包含一些诚实的C++对象指针.

当Obj-C++类被销毁时,它会立即调用dealloc吗?如果是这样,那么通过put来破坏C++类是最好的方法

delete obj
Run Code Online (Sandbox Code Playgroud)

在dealloc方法?

cocoa objective-c objective-c++

15
推荐指数
2
解决办法
2万
查看次数

Objective-C++ 11 - 为什么我们不能将块分配给lambda?

所以,我刚刚升级到Xcode 4.4,我注意到在更改日志中:

Apple LLVM编译器支持其他C++ 11功能,包括lambdas

哪个太棒了!所以我开始编码,我找到了一些东西:

  1. Lambdas可分配给Objective-C块:

    void (^block)() = []() -> void { 
        NSLog(@"Inside Lambda called as block!");
    };
    
    block();
    
    Run Code Online (Sandbox Code Playgroud)
  2. std::function 可以持有Objective-C块:

    std::function<void(void)> func = ^{
        NSLog(@"Block inside std::function");
    };
    
    func();
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我们不能将一个Objective-C块分配给lambda:

    auto lambda = []() -> {
        NSLog(@"Lambda!");
    };
    
    lambda = ^{ // error!
        NSLog(@"Block!");
    };
    
    lambda();
    
    Run Code Online (Sandbox Code Playgroud)

为什么是这样?鉴于我们上面所看到的,这两者在语义上是否应该是等价的?

c++ lambda objective-c objective-c++ c++11

15
推荐指数
1
解决办法
3554
查看次数

混合Objective C,(*.m,*.mm和.c /.cpp)文件

在我的项目中,核心库是C/C++文件的一部分,而UI需要在Objective C中开发,我能够从Objective C/.mm文件访问/调用C++函数,但到目前为止没有反转,即我不是能够从C++文件调用Objective C函数,当我试图包括Objective C头甚至系统头

#import <foundation/foundation.h> 
Run Code Online (Sandbox Code Playgroud)

大约1000+编译错误,

这样的事情

/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:180:0 /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:180: error: expected unqualified-id before '@' token


/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:182:0 /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:182: error: expected initializer before '*' token


/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:183:0 /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:183: error: 'NSString' was not declared in this scope


/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:183:0 /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:183: error: 'aSelectorName' was not declared in this scope
Run Code Online (Sandbox Code Playgroud)

我错过了一些预编译标志等..任何人都可以建议我,最好的方式来调用/访问从NSObject继承的目标C类,而不需要修改很多C++代码,我只需要调用一个函数

代码结构/包含头文件的顺序是

Some system header file
Some Core Class Header file 

#import <foundation/foundation.h>
Run Code Online (Sandbox Code Playgroud)

c++ cocoa objective-c objective-c++

14
推荐指数
1
解决办法
3万
查看次数

从Objective-C调用C++

对于那些已经成功地从Objective-C调用C++代码的人,请您启发我吗?

这个链接说你需要使用他在文章中描述的技术来包装你的C++代码.它看起来不错,但我仍然有问题.

这个链接说,只要调用C++类的Objective-C类已经转换为.mm(Objective-C++)类,那么这两个应该可以很好地协同工作.

在我尝试添加方法调用时,这些方法中的每一种都让我感到悲伤.有人可以给我一个简单的Hello World iOS应用程序的代码,该应用程序使用Objective-C作为"Hello"部分,而使用Objective-C++类的"World"部分使用C++类吗?或者我仍然有错误的整个概念?

c++ objective-c objective-c++ ios

14
推荐指数
1
解决办法
2万
查看次数

在接听来电后无法重新开始录制

我在录制音频时为中断通知添加了一个观察者.

这在执行拨出电话,接听来电而不是应答,Siri等时工作正常.

现在我的应用程序在后台运行,屏幕顶部有红色条,继续上述状态下的录制不是问题.

但是当我真正接听来电时.我收到另一个AVAudioSessionInterruptionTypeBegan通知,然后当我停止通话时,我从未收到通知AVAudioSessionInterruptionTypeEnded类型.

我已经尝试使用CTCallCenter来检测呼叫何时开始,但我无法从该回调重新开始录制.

有谁知道如何让中断机制与实际得到回答的来电一起工作?

这是我正在使用的代码(的一部分);

CFNotificationCenterAddObserver(
                CFNotificationCenterGetLocalCenter(),
                this,
                &handle_interrupt,
                (__bridge CFStringRef) AVAudioSessionInterruptionNotification,
                NULL,
                CFNotificationSuspensionBehaviorDeliverImmediately );
Run Code Online (Sandbox Code Playgroud)

...

static void handle_interrupt( CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo )
{
    au_recorder *recorder = static_cast<au_recorder*>( observer );

    NSNumber* interruptionType = [( ( __bridge  NSDictionary* ) userInfo ) objectForKey:AVAudioSessionInterruptionTypeKey];
    switch ( [interruptionType unsignedIntegerValue] )
    {
        case AVAudioSessionInterruptionTypeBegan:
        {
            // pause recorder without stopping recording (already done by OS)
            recorder->pause();
            break; …
Run Code Online (Sandbox Code Playgroud)

core-audio objective-c++ audiounit ios avaudiosession

14
推荐指数
1
解决办法
624
查看次数