gpt4 book ai didi

c++ - 尝试从 Swift 调用 C++ 代码时出现链接器错误

转载 作者:行者123 更新时间:2023-11-28 10:00:46 25 4
gpt4 key购买 nike

我试图从 Swift 调用一个简单的 C++ 函数,但我收到了 Apple Mach-O 链接器错误:

Error

Error 2

我的 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) 尝试了这段代码,但出现了同样的错误。

我确实将桥接 header 添加到build设置中。

我读过一些关于将我的 C++ 代码包装在 Obj-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)接口(interface)。

关于c++ - 尝试从 Swift 调用 C++ 代码时出现链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29327312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com