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

4

1 回答 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. 
}

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

于 2013-01-17T10:20:29.720 回答