网上有很多关于这个的问题,但我无法解决我的问题。这几天我一直在研究这个。
我想在 Swift 项目上运行一个简单的 C++ 类,为此我遵循了本教程:http ://www.swiftprogrammer.info/swift_call_cpp.html 。基本上我已经按照以下步骤操作:
- 创建
junk.cpp
和junk.h
文件 - 编译使用
g++ or/and clang++
- 创建 .a 文件:
$ ar r libjunkcpp.a junk.o
ranlib libjunkcpp.a
- 链接到 Xcode 中
Build Phases -> Link Binary With Libraries -> Add
当我编译时,出现以下错误:
Undefined symbols for architecture x86_64:
"A::getInt()", referenced from:
_getIntFromCPP in wrapper.o
"A::A(int)", referenced from:
_getIntFromCPP in wrapper.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
垃圾变种h
class A {
public:
A(int);
int getInt();
private:
int m_Int;
};
垃圾文件
#include "junk.h"
A::A(int _i) : m_Int(_i) {}
int A::getInt() {
return m_Int
}
包装器.cpp
#include "junk.h"
extern "C" int getIntFromCPP() {
// Create an instance of A, defined in
// the library, and call getInt() on it:
return A(1234).getInt();
}
桥接器
int getIntFromCPP();