我正在使用xcode创建一个带有C的静态库,我似乎收到错误Undefined symbols for architecture i386
。
静态库项目包括三个文件:fun.c
,testFun.cpp
,testFun.h
以下是testFun.cpp
#include "testFun.h"
extern void test_c_fun();
void TestFun::test()
{
printf("# TestFun c++ # ");
test_c_fun();
}
这是fun.c
#include <stdio.h>
void test_c_fun()
{
printf("# test_c_fun #");
}
当我使用“IOS Device”和“iPhone Retina(4英寸)”构建时,我会收到两个x.a文件。
使用lipo
工具和-create
参数输出新的x.a,支持arm
和i386
。
将x.a添加到我的项目中,并包含testFun头文件now code:
TestFun tf;
tf.test();
然后构建它,我得到这些错误
Undefined symbols for architecture i386: "test_c_fun()", referenced from: TestFun::test() in libstatistic.a(testFun.o) ld: symbol(s) not found for architecture i386
当我隐藏c-fun调用(test_c_fun)时,构建成功!
看起来像:
#include "testFun.h"
extern void test_c_fun();
void TestFun::test()
{
printf("# TestFun c++ # ");
//test_c_fun();
}
为什么它不适用于C文件?
答案 0 :(得分:1)
在testFun.cpp中,使用extern C
声明C函数as
extern "C" void test_c_fun();
C样式函数具有不同的名称修改规则。在.cpp文件中声明C函数时,它会将该函数视为C ++函数。
当您在声明之前添加extern "C"
时,它会将该函数视为C函数。