可以通过两种方式在应用程序中使用库:

  • 静态链接的
  • 动态链接的

  • 但是如何使用 Visual Studio (windows) 和 GCC 做到这一点?

    我知道库仅以以下 4 种方式分发:
  • 仅头文件库
  • Windows 的
  • *.lib 文件。 *.a for linux
  • *.dll (windows) & *.so (linux)。

  • 源代码分发只是编译。“仅头文件库”只不过是一个源代码分发。

    现在,如果所需的库以 *.lib 形式分发。为了使用它。

    Visual Stuido 上:
  • 我们将包含标题(*.h)的目录路径添加到 Configuration Properties > General > Additional Include Directories
  • 我们将每个 *.lib 文件添加到 Configuration Properties > Linker > Input > Additional Dependencies
  • 我们将 *.lib 文件的目录路径添加到:Configuration Properties > Linker > Additional Library Directories

  • 如何为 GCC/MingW 做同样的事情?
    当库也作为 *.dll 或 *.so 分发时,我不知道如何构建我的应用程序。有人能告诉我在 Visual Studio (windows) 和 GCC(linux)/mingw(windows) 的这些情况下我需要做什么吗

    最佳答案

    在 GCC 上,对于静态链接,您将在命令行中包含库。假设你有 glib-2.0.lib 并且你使用 GLib 库的程序是 my_prog.c,然后你调用 GCC 作为gcc my_prog.c -L<library_dir_here> -lglib-2.0

    至于 dll 等,动态库是您不会通过将它们传递给链接器来链接到程序的东西。相反,操作系统为您提供了在运行时需要时加载它们的功能。这就是它被称为动态的原因。在 Windows 中是 LoadLibrary ,在 Linux 中是 dlopen 。这两个函数都获取一个字符串(它是 dll 左右的名称)并在它在机器上可用时加载它。加载后,通过将其名称传递给 Windows 上的 GetProcAddress 和 Linux 上的 dlsym 来查找您需要从库中获取的函数;两者都返回一个函数指针,您可以使用它调用该函数。由于您不是直接调用库提供的函数,而是通过函数指针,因此在构建应用程序时无需静态链接它们(即,将它们传递给链接器)。

    关于c++ - 如何使用 `static linking` & `Dynamic linking` 和 gcc & Visual Studio 构建 C/C++ 程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2247601/

    10-11 22:43
    查看更多