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

3

在这里一个人问“如何在C++中制作自己的库?”。这正是我的问题。有一个答案:

  1. 创建文件“mylibrary.h”和“mylibrary.cpp”。
  2. 只编译库,它不应该在内部有“main()”函数。这一步将生成一个名为“myfile.o”的目标文件。
  3. 创建另一个文件,例如“main.cpp”。在 main.cpp 中,您需要 #include “mylibrary.h”。
  4. 编译 main.cpp 并添加来自步骤2的库以链接(在本例中为“myfile.o”)。如果您没有添加此库,您将收到类似于“链接器错误 - 找不到函数定义”的错误消息,或者类似消息。

但我仍然有一些问题:

  1. Library.cpp 应该有一个 main() 函数。但是这个函数应该包含什么?我不希望我的库在程序启动时自动执行某些操作,我希望它包含一组只有在被显式调用时才会执行的函数。
  2. 在第 4 步中,写道需要 "编译 main.cpp 并添加第 2 步中的库",但是我已经在第 2 步中编译了库。我是否还需要再次编译它?
  3. 什么是 "在这种情况下 'myfile.o'" 的意思?在这种情况下我应该如何处理 "myfile.o"?
  4. 在第 4 步中写道 "如果您不添加此库,则会收到错误消息"。但是 "添加库" 是什么意思?在第 3 步中我将 #include "mylibrary.h" 放入了 main.cpp 中,所以我已经添加了库吗?还是我需要做更多的事情来添加库?

请问你能帮助我理解这些答案吗?


添加:我认为我需要使用Eclipse生成.a.lib.so.dll文件?有人知道我该如何做以及我应该生成什么吗?

那个答案中关于 main 的内容是如何使用该库的示例。 - yiding
@yiding,你是指Library.cpp中的main.cpp还是main()函数? - Roman
在库中不需要主函数。 - yiding
@一定,那么答案是错误的吗?因为它说“编译库,它不应该有一个“main()”函数?” - Roman
是的,它不应该。就像你应该写一个一样。 - yiding
"Shouldn't" 是 "should not" 的缩写。 - 11684
1个回答

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 步骤,并使用适当的编译器选项一步完成这两个步骤。

谢谢你的回答。"link"是什么意思?我的意思是"compile but do not link"和"link main.o and factorial.o"是什么意思? - Roman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接