如何在Eclipse中创建C ++库?

时间:2013-01-17 09:52:14

标签: c++ eclipse

Here一个人问“如何用C ++创建自己的库?”。这正是我的问题。这个问题有一个答案:

  
      
  1. 创建文件“mylibrary.h”和“mylibrary.cpp”。
  2.   
  3. 只编译库,它不应该有“main()”函数   它。此步骤将生成一个名为“myfile.o”的目标文件。
  4.   
  5. 创建另一个名为“main.cpp”的文件。在main.cpp中   你需要#include“mylibrary.h”。
  6.   
  7. 编译main.cpp并将步骤2中的库添加到link in(在本例中为“myfile.o”)。如果你不添加这个库,你会得到一个   错误消息,如“链接器错误 - 无法找到函数定义”,或   类似的东西。
  8.   

但我还有一些问题:

  1. Library.cpp应该具有main()功能。但是这个主要功能应该是什么?我的程序启动时,我不希望我的库默认执行某些操作。我希望它包含一组仅在显式调用它们时才执行的函数。
  2. 在第4步中写道,我需要“编译main.cpp并从第2步添加库”,但我已经在第2步编译了库。我应该再次编译它吗? / LI>
  3. “在这种情况下'myfile.o'”是什么意思?在这种情况下,我应该用“myfile.o”做什么?
  4. 在步骤4中写入“如果您不添加此库,则会收到错误消息”。但是“添加库”是什么意思?在第3步,我将#include "mylibrary.h"放入main.cpp,所以我添加了库?或者我需要做更多的事情来添加库?
  5. 你能帮我理解答案吗?


    ADDED:我想我需要使用Eclipse来生成.a.lib.so.dll个文件?有谁知道我怎么做以及我应该产生什么?

1 个答案:

答案 0 :(得分:2)

对于此示例,请考虑提供阶乘函数的“库”。为简单起见,我使用自由函数。

// factorial.h
int factorial(int input);

// factorial.cpp
#include "factorial.h"

int factorial(int input) {
    if(input > 0) return input * factorial(input - 1);
    else if(input == 0) return 1;
    else return 0;
}

现在编译这些文件以生成factorial.o,但不要链接。 (相应地配置Eclipse构建命令。如果使用gcc,请适当使用-c-o标志。请参阅编译器文档以了解这些标志的作用。)

接下来创建一个main.cpp(您实际上可以将其命名为任何名称。)

// main.cpp
#include "factorial.h"

int main() {
    // use your library code here to make sure it is usable and working.  
    factorial(3);
    factorial(5); 
    // etc. 
}

现在将其编译为main.o,然后将其与之前的factorial.o链接在一起以生成可执行文件。实际上,您可以跳过中间main.o步骤,并使用适当的编译器选项一步完成这两个步骤。