编译C++库mingw

4
我试着跟随C++头文件教程(链接),像教程中说的那样,我有main.cpp、add.cpp和add.h这几个文件。但是,迄今为止,我还没有使用IDE,而是直接从命令行编译。
但是,我似乎不知道如何将add.h和add.cpp编译成库。
目前,如果我输入命令:g++ -o main main.cpp add.h add.cpp,它会编译成功并给我一个main.exe。但是,如何让包含add.h和add.cpp的库被预编译并保存为dll呢?这是在命令行中相对简单的事吗?
谢谢您的帮助,再见。

从马嘴里说出来 http://www.mingw.org/wiki/sampledll - Severin Pappadeux
使用 -c 开关,您可以告诉 GCC 只编译而不链接。使用 GCC 生成的目标文件,您可以将它们链接成可执行文件。请注意,创建 DLL 是过度的,虽然可以轻松找到为您完成此操作的示例代码。 - Ulrich Eckhardt
2个回答

6

有两种类型的库:静态库和动态库。静态库会与生成的程序一起链接,因此每个使用该库的程序都会获得其自己的库代码副本。

一种更省内存的方法是使用共享库(在Windows上称为DLL),它们根据需要从特定于每个平台的位置加载,但优点是当同时运行使用该库的不同程序时,只需将库代码的一个实例加载到内存中,并且这些程序的生成二进制代码不包含库代码。它驻留在一个单独的文件中,需要与应用程序一起发送并安装到正确的位置。

如果您使用类Unix的构建工具(即使在Windows系统上),这可能是您将使用的命令序列,以生成包含您的 add.cpp 文件中代码的库:

对于静态库:

g++ -c add.cpp 
ar crf libadd.a add.o
g++ -o main main.cpp -L. -ladd

第一个命令将add.cpp编译为add.o文件,第二个命令将从add.o文件创建静态库libadd.a。如果您想将更多目标文件包括在库中,请将它们添加到该命令行的末尾。最后一个命令将在将静态库文件libadd.a与之链接时编译您的main.cpp程序。 -L.选项指示链接器在当前目录中搜索库文件。或者,您可能希望将库文件放在其他某个目录中,并使用-Lyour_directory选项。

对于共享库(dll):

g++ -shared -o libadd.so add.cpp 
g++ -o main main.cpp -L. -ladd

但是要运行它,系统必须能够找到共享库。您可以通过将包含库的目录添加到LD_LIBRARY_PATH环境变量中来帮助它,例如:

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

对于Windows平台,您可能需要使用更多的限定符,这在mingw教程中有很好的解释:http://www.mingw.org/wiki/sampledll


非常感谢,这解答了我一些不知道自己有问题的疑惑,但是现在你提供的观点让我更理解了。感谢提供文档链接,我试着查看,但是感到有些压力,不知道该往哪里看。再次感谢,祝福 :) - ymbcKxSw

-1
g++ -c main.cpp
g++ -c add.cpp
g++ - o x.dll main.o add.o

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