【问题标题】:compiling a C++ library mingw编译一个 C++ 库 mingw
【发布时间】:2014-12-26 22:49:34
【问题描述】:

我试图按照 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?这是命令行相对直接的东西吗?

感谢大家的帮助,干杯。

【问题讨论】:

  • 使用-c 开关,您可以告诉GCC 只编译而不是链接。将生成的目标文件与 GCC 一起使用,您可以将它们链接到可执行文件中。请注意,创建 DLL 是多余的,尽管找到为您执行此操作的示例代码是一项微不足道的任务。

标签: c++ compilation mingw


【解决方案1】:

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

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

如果您使用类似 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 文件。如果您想在库中包含更多目标文件,请将它们添加到该命令行的末尾。最后一个命令编译您的 ma​​in.cpp 程序,同时将它与静态库文件 libadd.a 链接。 -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

【讨论】:

  • 非常感谢,这解释了一些我真的不知道我有疑问的事情,但现在你已经提供了这个观点,它确实更有意义。感谢您也提供文档链接,我尝试浏览它,但不知所措,不知道在哪里看。非常感谢,欢呼:)
【解决方案2】:
g++ -c main.cpp
g++ -c add.cpp
g++ - o x.dll main.o add.o

【讨论】:

    猜你喜欢
    • 2012-06-01
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多