2016-03-30 49 views
0

这是我创建dylib并使用它的过程,请帮助我我是dylib的新手。使用dylib时未定义的架构符号C++

我创建在Xcode中我已经给安装目录@rpath用于C++ dylib这是我的C++代码

Add.hpp:

#define EXPORT __attribute__((visibility("default"))) 
class Add 
{ 
public: 
    EXPORT void HelloWorld(const char *); 
    EXPORT int AddTwo(int a,int b); 
}; 

Add.cpp:

void Add::HelloWorld(const char * s) 
{ 
    AddPriv *theObj = new AddPriv; 
    theObj->HelloWorldPriv(s); 
    delete theObj; 
}; 
int Add::AddTwo(int a, int b) 
{ 
    return a+b; 
} 

在构建阶段使用复制文件在其他项目中创建dylib后,将其复制到Frameworks,我可以在中看到它10。在生成设置中,运行路径搜索路径设置为@executable_path/../Frameworks。我在根文件夹中添加了头文件标题搜索路径$(SRCROOT)

我得到的错误是:

Undefined symbols for architecture x86_64: 
    "Add::AddTwo(int, int)", referenced from: 
     -[ViewController viewDidLoad] in ViewController.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

编辑:

$ nm -gU ****/AddTest.app/Contents/Frameworks/libAdd.dylib 
0000000000001170 T __ZN3Add10HelloWorldEPKc 
0000000000001220 T __ZN3Add6AddTwoEii 

能够看到lib和otool输出symboles是:

$ otool -L libAdd.dylib 
    @rpath/libAdd.dylib (compatibility version 1.0.0, current version 1.0.0) 
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1) 

回答

0

通过添加库解决链接二进制文件库构建阶段