使用xcode用C创建静态库,错误:“架构i386的未定义符号”!

时间:2013-12-02 11:11:05

标签: ios c xcode i386

我正在使用xcode创建一个带有C的静态库,我似乎收到错误Undefined symbols for architecture i386

静态库项目包括三个文件:fun.ctestFun.cpptestFun.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,支持armi386

将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文件?

1 个答案:

答案 0 :(得分:1)

在testFun.cpp中,使用extern C

声明C函数

as

extern "C" void test_c_fun();

C样式函数具有不同的名称修改规则。在.cpp文件中声明C函数时,它会将该函数视为C ++函数。

当您在声明之前添加extern "C"时,它会将该函数视为C函数。