使用 dylib C++ 时未定义的体系结构符号
Undefined symbols for architecture while using dylib C++
这是我创建和使用 dylib 所遵循的过程,请帮助我,我是 dylib 的新手。
我正在为 C++ 创建 dylib xcode 我已经给出了 安装目录 @rpath 这是我的 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 后,将其复制到框架,我能够在 Sample.App/Contents/Frameworks/Mylib.dylib
中看到它。在构建设置中,Runpath Search Paths 设置为 @executable_path/../Frameworks
。我在给定 Header 搜索路径 $(SRCROOT)
.
的根文件夹中添加了 header
我得到的错误是:
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 输出中看到符号是:
$ 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)
通过在构建阶段
中将库添加到Link带有库的二进制文件来解决
这是我创建和使用 dylib 所遵循的过程,请帮助我,我是 dylib 的新手。
我正在为 C++ 创建 dylib xcode 我已经给出了 安装目录 @rpath 这是我的 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 后,将其复制到框架,我能够在 Sample.App/Contents/Frameworks/Mylib.dylib
中看到它。在构建设置中,Runpath Search Paths 设置为 @executable_path/../Frameworks
。我在给定 Header 搜索路径 $(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 输出中看到符号是:
$ 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)
通过在构建阶段
中将库添加到Link带有库的二进制文件来解决