可以通过两种方式在应用程序中使用库:
但是如何使用 Visual Studio (windows) 和 GCC 做到这一点?
我知道库仅以以下 4 种方式分发:
源代码分发只是编译。“仅头文件库”只不过是一个源代码分发。
现在,如果所需的库以 *.lib 形式分发。为了使用它。
在 Visual Stuido 上:
如何为 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/