相关疑难解决方法(0)

如何为Android和iOS使用相同的C++代码?

NDK的 Android 支持C/C++代码和iOS,Objective-C++也支持,那么我如何用Android和iOS之间共享的本机C/C++代码编写应用程序?

c++ java java-native-interface cross-platform objective-c++

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

从Objective C类调用Swift函数

我有个问题.我有一个旧的Objective C项目,我想调用新的Swift函数和对象,我创建了文件"-Bridging-Header.h"和"-Swift.h"

我很容易将函数从Swift调用到Objective C,但我有一个反向问题.

所以我创建了一个简单的类"System.Swift"

import Foundation

@objc class System : NSObject {

@objc func printSome() {
    println("Print line System");
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我已经尝试按照这里的文档和<...> - Swift.h文件内部写了这个

@class System;

@interface System : NSObject

-(void)printSome;

@end
Run Code Online (Sandbox Code Playgroud)

我已经在Objective C Class中导入了它.此时,在我的Objective C Code的Objective C类(当前为UIViewController)中,我尝试调用"printSome"方法:

- (void)viewDidLoad
{
    [super viewDidLoad];
    System * sis = [[System alloc] init];
    [sis printSome];
    //any additional setup after loading the view from its nib.
}
Run Code Online (Sandbox Code Playgroud)

现在我有以下错误:

架构i386的未定义符号:"_ OBJC_CLASS _ $ _ System",引用自:"ObjectiveC_Class_That_Call_Swift_Object"中的objc-class-ref .o ld:未找到架构i386 clang的符号:错误:链接器命令失败,退出代码为1(使用-v看到调用)

有人能帮帮我吗?

关心所有.

objective-c swift

73
推荐指数
5
解决办法
8万
查看次数

我可以在同一个Xcode项目中使用Swift,Objective-C,C和C++文件吗?

是否可以在同一个项目中使用所有4种语言,如果是,如何使用?

这个问题有类似的问题:我可以将Swift与C++混合使用吗?就像Objective-C .mm文件一样,接受的答案是否定的.

利用Bridging Header充分,.h不包含C++报表,Objective-C包装时.h不包含C++,.mm文件做实际的包装C++类,并且.swift,可以在4种语言(5如果包括Objective-C++)建立并链接到一个单一的可执行文件?


c c++ objective-c swift bridging-header

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

在Swift iOS中使用OpenCV

在我的xcode项目中添加OpenCV 2框架后,我尝试搜索samlpes或教程以与swift集成.

有没有相同的好教程?

opencv image-processing ios swift

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

使用Swift和Qt

我们可以很容易地在Qt中使用Objective-C和C++.

观看了Apple的许多WWDC 2015演讲,我预计Swift将取代OS-X(和iOS)开发的Objective-C; 所有的演示都使用了Swift.

考虑到你可以一起使用Objective-C和Swift,使用桥接头,是否可以在Qt项目中编译Swift代码并使用C++访问Swifts的第一类对象(Classes,Structs,Enums等)?


如果有可能...

从Qt调用Objective-C函数需要将代码包装在C函数中,并从Qt调用C头.

从Objective-C调用Swift需要一个桥接头来表示哪些Swift文件可用.然后在XCode项目中引用此标头; 我们可以在Qt .pro中做到这一点,如果是这样,怎么样?

假设我们可以指定桥接头,我们仍然只能从Objective-C文件调用Swift,但是可以直接从Qt中调用Swift,在C++中?

c++ macos qt swift

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

编译C代码并在Linux下将其暴露给Swift

有没有办法编译本机C或C++代码并将其暴露给Linux上的Swift?我可以看到像libdispatch这样的几个Apple库是用纯C编写的,只要导入它们就可以在Swift中访问它们.

要设置示例,假设我有两个文件Car.cCar.h定义了名为的结构Car.有没有办法可以编译它们并通过编写import语句在Swift中使用它们?

import Car
Run Code Online (Sandbox Code Playgroud)

我试着写module.modulemap里面目录下的文件.c,.h并且Package.swift文件位于:

module Car {
   header "Car.h"
   export *
}
Run Code Online (Sandbox Code Playgroud)

并运行swift build.这个产量误差:

<unknown>:0: error: unexpected 'commands' value (expected map)
<unknown>:0: error: unable to load build file
Run Code Online (Sandbox Code Playgroud)

我正在使用Swift 3.0-dev版本(2016年3月24日)

[更新1]

我已经联系了Max(mxcl) - Swift Package Manager的创建者之一,他告诉我要删除modulemap.c并将.h文件直接放在Sources文件夹中.我编译完这个包后,但它不能用作模块.此外,我无法调用文件中的任何已定义函数.h.

c linux swift swift2

11
推荐指数
2
解决办法
2914
查看次数

从Swift调用C++函数

我应该如何从Swift文件中调用C++函数(不涉及类)?我试过这个:

someCFunction.c中:

void someCFunction() {
    printf("Inside the C function\n");
}

void aWrapper() {
    someCplusplusFunction();
}
Run Code Online (Sandbox Code Playgroud)

someCpluplusfunction.cpp中:

void someCplusplusFunction() {
    printf("Inside the C++ function");
}
Run Code Online (Sandbox Code Playgroud)

main.swift中:

someCFunction();
aWrapper();
Run Code Online (Sandbox Code Playgroud)

Bridging-Header.h中:

#import "someCFunction.h"
#import "someCplusplusFunction.h"
Run Code Online (Sandbox Code Playgroud)

我发现这个答案非常有用,但我仍然无法使其发挥作用.你能指出我正确的方向吗?

谢谢!

c c++ xcode linker swift

9
推荐指数
1
解决办法
7734
查看次数

在 Swift 中包含 C++ 头文件

我有一个 C++ 头文件(名为header.h),我想将其包含到我的 Swift 项目中。

由于我想要包含的 C++ 框架尚未完成,所以我现在只有头文件。

我的 C++ 头文件header.h看起来有点像这样:

#include <vector>

struct someStruct{
    float someAttr;
}

class someClass{
    public:
        enum SomeEnum{
            Option1,
            Option2
        }

        void someFunc(const double value) {}
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我尝试将header.h文件包含在 中时,project-Bridging-Header.h它永远找不到我包含在 header.h 中的向量

找不到“矢量”文件

我尝试重命名header.hheader.hpp. 我尝试在右侧面板中将桥接标头类型设置为 C++ 标头。但他们都没有帮助。

我希望你们中的一些人可以帮助我找出我做错了什么。

c++ vector include swift bridging-header

4
推荐指数
1
解决办法
6830
查看次数

Xcode 7不使用c ++框架构建项目

我无法使用新版本的opencv 3.0.0框架构建项目(版本2没有此问题).Xcode 7不会将c ++源代码编译为c ++.

这是最简单的设置:

  1. 从这里下载3.0.0框架http://netix.dl.sourceforge.net/project/opencvlibrary/opencv-ios/3.0.0/opencv2.framework.zip
  2. 使用Swift语言创建最简单的ios项目.
  3. 将框架拖放到项目中.
  4. 创建Objective-C++源和标头并将它们添加到项目中.
  5. 创建桥接标头.

这是设置:

在此输入图像描述 在此输入图像描述

  1. 建立.

以下是编译器所说的内容:

opencv2.framework/Headers/core/base.hpp:49:4: error: base.hpp header must be compiled as C++
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这是为什么?我有.mm文件,它应该编译为Objective-C++源代码.

c++ xcode opencv ios opencv3.0

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

在objective-C++(.mm文件)中调用swift

可以在Objective-C++(.mm)文件中调用Swift代码吗?有没有简单的解决方法,如果没有?

我有一个Xcode项目,它是Swift,Objective-C和C++的混合体.我没有问题从Objective-C到Swift用-Bridging-Header.h或从Swift到Objective-C用-Swift.h.

但我有一个.mm文件,它是Objective-C++.当我尝试#import "[ProductName]-Swift.h"它时会在-Swift.h文件中抛出许多编译错误,例如:

找不到'NSApplicationDelegate'的协议声明,你的意思是'NSConnectionDelegate'吗?

没有名为'NSTableViewDataSource'的类型协议

等等...

我已经研究了其他几个类似的问题,例如我可以将Swift与C++混合使用吗?就像Objective - C .mm文件一样,它似乎没有给我一个明确的答案或解决方案.

在我看来,我目前的解决方法是在Objective-C中创建一个使用Swift代码然后将其导入Objective-C++代码的包装器对象.

objective-c objective-c++ swift

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

如何将 Swift 与 C 或 C++ 接口?

我想用 C 或 C++ 编写一些本机代码,以便在 iOS 上与 Swift 一起使用。这段代码主要从 Swift 调用,但也需要回调到 Swift。

将 Swift 与这两种语言中的每一种进行交互的机制是什么?

在这种接口中,C 或 C++ 中哪一个的约束最少,为什么?跨语言调用是否有性能差异?

c c++ cross-language ios swift

-3
推荐指数
1
解决办法
3148
查看次数