我在编译作为单独目标的.a C静态库时出现问题。
我的库名为libtest.a,只有一个函数:int test(),它总是返回1。 我把libtest.a和test.h(它的头文件)放在mylibrary_directory
中然后我创建了一个新的iphone视图基础项目,并将mylibrary_directory添加到库搜索路径,标题搜索路径和xcode中的用户标题搜索路径。我还在其他链接器标志选项中添加了-ltest标志。
当我在myProjectViewController.m中调用test()时, WORKS
- (void)viewDidLoad {
[super viewDidLoad];
test();
}
到目前为止一切顺利。但是当我在我的项目中创建一个新的C ++类来调用test()时会出现问题。然后链接器抱怨找不到符号_test(),并且不构建projetc。
myClass.h:
#import "test.h"
class myClass
{
int testCall();
}
myClass.mm:
int myClass::testCall()
{
return test();
}
我明白了:
未定义的符号:
"test()", referenced from:
myClass::testCall() in myClass-64D20670AC6C3193.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
Ld命令输出显示正确的-ltest和-Lcorrect_paths
我的猜测是,当我编译我的库或myProject时,我错过了一些标志。 有什么想法或帮助吗?
由于
巴巴。
答案 0 :(得分:2)
可能是C ++名称错误。确保在C ++可以看到的地方标记test()
extern "C"
的声明。