我试图跟随C ++标题教程here,并且正如教程所说,我有文件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?这是命令行相对直接的东西吗?
感谢任何帮助,欢呼。
答案 0 :(得分:3)
有两种类型的库:静态库和动态库。静态库与生成的程序链接在一起,因此使用该库的每个程序都将获得自己的库代码副本。
更节省内存的方法是使用共享库(在称为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 ,第二个将从创建一个静态库 libadd.a > add.o 文件。如果要将更多目标文件包含到库中,请将它们添加到该命令行的末尾。最后一个命令编译 main.cpp 程序,同时将其与静态库文件 libadd.a 链接。 -L。选项指示链接器在当前目录中搜索库文件。或者,您可能希望将库文件放在其他目录中,并使用 -Lour_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
答案 1 :(得分:0)
g++ -c main.cpp
g++ -c add.cpp
g++ - o x.dll main.o add.o