gpt4 book ai didi

c++ - 体系结构 x86_64 : when making a call to a C++ function in Xcode 8 的 undefined symbol

转载 作者:行者123 更新时间:2023-11-28 05:17:44 25 4
gpt4 key购买 nike

我正在尝试在 Xcode 中创建一个项目以访问 OpenCV 框架,以便最终与基于 Swift 的应用程序一起使用。

在高层次上,我有 C++ 中的 OpenCV 框架,它与 C++ 绑定(bind)接口(interface)。然后,一个 Objective-C 类包装绑定(bind),以便我的 Swift 代码可以访问它。

但是,虽然在编辑器中一切正常,但当我编译它时,我在绑定(bind)类中定义的每个 C++ 函数都收到以下错误。

Undefined symbols for architecture x86_64: "Library::multiply()", referenced from:+[ViewController multiply] in ViewController.o

以下是我的项目的缩略版,以说明问题。

首先,受影响的文件:

enter image description here

如您所见,我的包装文件 (ViewController.mm) 上有正确的后缀。

ViewController.mm 内容:

#import "ViewController.h"
#import "library.hpp"

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];

NSLog(@"Number: %f", Library().multiply());
}

@end

library.hpp 内容:

#pragma once
#include <stdio.h>

class Library {
public:
Library();
~Library();
double multiply();
};

library.cpp 内容:

#include "library.hpp"

Library::Library() { }

Library::~Library() { }

double multiply() {
return 1.0 * 2.0;
}

与 C++ 相关的build设置:

enter image description here

** 已更新 **

Harish Gupta 发布的答案肯定是正确的,并且确实解决了我的问题。但是,我确实进行了进一步调查,并提出了我认为在规模上更好的解决方案,即为我的 C++ 类创建一个命名空间,然后将其拉入我的 .mm 文件中using 命令。

最佳答案

您没有将 multiply() 定义为导致此问题的类函数。声明如下:

double Library::multiply() {
return 1.0 * 2.0;
}

关于c++ - 体系结构 x86_64 : when making a call to a C++ function in Xcode 8 的 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42263546/

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