2017-02-16 4 views
0

私はSwCベースのアプリケーションで最終的に使用するためにOpenCVフレームワークにアクセスするためにXCodeでプロジェクトを作成しようとしています。アーキテクチャx86_64の未定義のシンボル:XCode 8のC++関数を呼び出すとき

私はOpenCVフレームワークをC++で持ち、C++バインディングとインターフェイスしています。次に、Objective-Cクラスがバインディングをラップして、Swiftコードがそれにアクセスできるようにします。

しかし、エディタですべてうまく動作しますが、コンパイルすると、バインディングクラスで定義した各C++関数に対して次のエラーが発生します。アーキテクチャx86_64のため

未定義シンボル: "ライブラリ::乗算()"、 から参照:+ [のViewControllerは、乗算] 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内容:C++に関連する

#include "library.hpp" 

Library::Library() { } 

Library::~Library() { } 

double multiply() { 
    return 1.0 * 2.0; 
} 

ビルド設定:

enter image description here

**ハリッシュグプタによって投稿

答えは確かに正しい、と私の問題を解決しました**更新しました。しかし、私はさらに調査し、C++クラスのネームスペースを作成し、それをusingコマンドで私の.mmファイルにプルすることで、これに対してより良い解決策であると思いました。

答えて

1

この問題を引き起こしているクラス関数としてmultiply()を定義していません。 次のように宣言します。

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

を私は笑うしなければならない、私はちょうどそれを修正してきたように、同じ答えを投稿するちょうど約だったが、あなたを受け入れます - ありがとう! – CodeBender

関連する問題