尝试从 Swift 调用 C++ 代码时出现链接器错误
Linker error when trying to call C++ code from Swift
我试图从 Swift 调用一个简单的 C++ 函数,但我收到 Apple Mach-O 链接器错误:
我的 Sample.h 文件 (C++):
#if __cplusplus
extern "C" {
#endif
int getOne();
#ifdef __cplusplus
}
#endif
我的 Sample.cpp 文件:
#include <stdio.h>
int getOne()
{
return 1;
}
我的桥接头:
#include "Sample.h"
我试图调用这个函数,就像这样简单:
println(getOne())
备注:
我确实将 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;
}
这样 extern "C"
链接规范也适用于函数定义。
从相应的.c/.cpp/.m文件中包含.h文件通常是一个好的做法,以确保执行
匹配 public 接口。
我试图从 Swift 调用一个简单的 C++ 函数,但我收到 Apple Mach-O 链接器错误:
我的 Sample.h 文件 (C++):
#if __cplusplus
extern "C" {
#endif
int getOne();
#ifdef __cplusplus
}
#endif
我的 Sample.cpp 文件:
#include <stdio.h>
int getOne()
{
return 1;
}
我的桥接头:
#include "Sample.h"
我试图调用这个函数,就像这样简单:
println(getOne())
备注:
我确实将 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;
}
这样 extern "C"
链接规范也适用于函数定义。
从相应的.c/.cpp/.m文件中包含.h文件通常是一个好的做法,以确保执行 匹配 public 接口。