在xcode中创建和使用静态库

时间:2010-03-28 16:23:45

标签: c++ xcode macos static-libraries

我正在尝试在xcode中创建一个静态库,并从另一个程序链接到该静态库。

因此,作为测试,我创建了一个BSD静态C库项目,并添加了以下代码:

// Test.h

int testFunction();

// Test.cpp的

#include "Test.h"
int testFunction() {
return 12;
}

编译好并创建一个.a文件(libTest.a)。

现在我想在另一个程序中使用它,所以我创建了一个新的xcode项目(cocoa应用程序) 请准备以下代码:

// main.cpp中

#include <iostream>
#include "Testlib.h"

int main (int argc, char * const argv[]) {
    // insert code here...
    std::cout << "Result:\n" <<testFunction();
    return 0;
}

// Testlib.h

extern int testFunction();

我右键点击了该项目 - &gt;添加 - &gt;现有框架 - &gt;添加其他 选择.a文件并将其添加到项目视图中。

我总是遇到这个链接器错误:

Build TestUselibrary of project TestUselibrary with configuration Debug

Ld build/Debug/TestUselibrary normal x86_64
cd /Users/myname/location/TestUselibrary
setenv MACOSX_DEPLOYMENT_TARGET 10.6
/Developer/usr/bin/g++-4.2 -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk 
-L/Users/myname/location/TestUselibrary/build/Debug  
 -L/Users/myname/location/TestUselibrary/../Test/build/Debug 
-F/Users/myname/location/TestUselibrary/build/Debug 
-filelist /Users/myname/location/TestUselibrary/build/TestUselibrary.build/Debug/TestUselibrary.build/Objects-normal/x86_64/TestUselibrary.LinkFileList 
-mmacosx-version-min=10.6 -lTest -o /Users/myname/location/TestUselibrary/build/Debug/TestUselibrary



Undefined symbols:
  "testFunction()", referenced from:
      _main in main.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

我是macosx开发的新手,也是c ++的新手。我可能错过了一些相当明显的东西,我的经验来自于在Windows平台上创建dll。 我真的很感激任何帮助。

2 个答案:

答案 0 :(得分:1)

您不会将库(.a文件)添加为框架 - 它只是一个库 - 将其添加到项目中,就像添加源文件一样。

另请注意,您不需要Testlib.h - 仅#include Test.hmain.cpp

答案 1 :(得分:1)

您确定库源文件名为Test.cpp而不是Test.c吗?使用.c我会得到完全相同的错误。

如果是Test.c,则需要将extern "C"添加到C ++的标头中。 E.g:

#ifdef __cplusplus
extern "C" {
#endif

int testFunction();

#ifdef __cplusplus
}
#endif

参见例如C++ FAQ lite entry了解更多详情。