Dej*_*dar 0 c++ xcode linker-errors swift
我试图从Swift调用一个简单的C++函数,但我得到Apple Mach-O链接器错误:


我的Sample.h文件(C++):
#if __cplusplus
extern "C" {
#endif
int getOne();
#ifdef __cplusplus
}
#endif
Run Code Online (Sandbox Code Playgroud)
我的Sample.cpp文件:
#include <stdio.h>
int getOne()
{
return 1;
}
Run Code Online (Sandbox Code Playgroud)
我的桥头:
#include "Sample.h"
Run Code Online (Sandbox Code Playgroud)
我试图将函数调用如下:
println(getOne())
Run Code Online (Sandbox Code Playgroud)
笔记:
我确实将C++库添加到项目和构建库(构建阶段),我尝试使用Xcode 6.2(Swift 1.1)和Xcode 6.3(beta Swift 1.2),并且出现相同的错误.
我确实在构建设置中添加了桥接头.
我已经阅读了一些关于在Obj-c中包装我的C++代码的内容,但我还没有完全掌握它.
任何帮助表示赞赏.
正如评论中已经说明的那样,错误是只有函数声明被标记为extern"C",而不是定义.
因此,在编译Swift源文件时,编译器会创建对符号"_getOne"的引用,但在编译"Sample.cpp"时,会定义C++错位符号"__Z6getOnev".因此,链接程序失败.
解决方案是包含"Sample.cpp"中的"Sample.h":
#include <stdio.h>
#include "Sample.h"
int getOne()
{
return 1;
}
Run Code Online (Sandbox Code Playgroud)
因此,extern "C"链接规范也应用于函数定义.
通常,最好从相应的.c/.cpp/.m文件中包含.h文件,以确保实现与公共接口匹配.
| 归档时间: |
|
| 查看次数: |
1339 次 |
| 最近记录: |