如何将第三方库添加到MinGW?

时间:2009-12-31 15:08:36

标签: mingw

我刚刚在this post

之后设置了MinGW环境

但是如何添加第三方库呢?

4 个答案:

答案 0 :(得分:7)

库由两个主要组件组成--C头文件和编译的目标代码存档。 GCC有一系列令人眼花缭乱的方法来指定这些东西,但是假设您使用的是存储在相对目录路径foo.a中的库foo/lib,以及一个位于foo.h的标题foo/inc {1}}。您自己的C代码位于main.c,如下所示:

#include "foo.h"
int main() {
  return FooFunc();    // call function in foo.a
}

要编译它,您可以使用命令行:

gcc main.c -Ifoo/inc foo/lib/foo.a -o main.exe

-I标志添加到搜索标头的路径。你也可以添加到lib路径,但事情开始变得复杂: - )

答案 1 :(得分:3)

与使用gcc

的任何其他系统没有什么不同
  • 获取消息来源
  • 解压
  • 运行配置 - 这可能需要调整或两个
  • 使
  • make install

现在使用适当-Lfoo/bar -lfoobar开关的新库。

我建议使用MSys MinGW系统来完成所有这些操作。

答案 2 :(得分:1)

我刚刚自己解决了这个问题。我强烈建议您阅读MinGW网页上的linking howtos。仔细阅读它们,因为有很多东西需要考虑。它们非常彻底,所以非常值得你花时间。

基本上有两种做事方式。首先,您可以将MinGW视为编译器,因为它就是这样,并从cmd.exe(命令提示符)或IDE调用它。另一种方法是使用MSYS,它基本上是一个Unix风格的shell,可以在Windows上运行,使用Unix样式的构建工具,如configure和make。

对于其中任何一个,你真的必须阅读我上面链接的howto,以了解如何搜索依赖路径。我在这里犹豫不决,因为它已经在howtos中解释并且复制了这些信息并不是一个好主意。如果您在阅读后有具体问题,我很乐意提供更多帮助。

答案 3 :(得分:0)

由于这花了我几个小时的SO研究,才能使这个第3方在MinGW下运行,一个明显的例子可能会帮助其他对我来说像是新话题的人。问题是如何添加第三方库,答案是:最好不要真正添加它们,而只是将它们用作参数(如@anon所述)。 我指的是@kjoppy的链接建议。在http://mingw.org/wiki/IncludePathHOWTO的底部:

作为选项(2)的变体,创建一个单独的目录层次结构, 每个外部库包都在本地 安装;这减轻了选项(1)的所有缺点,并且 选项(2)的程序包混合,但是会产生替代 惩罚:-与选项(2)一样,使用适当的“ -I DIR”和“ -L DIR” 必须将选项添加到每个GCC调用中;但是,而选项 (2)每种类型仅需要一个附加路径,此选项 对于每个外部组件,每种类型都需要一个附加组件 要部署的库。 (尽管这仍然可以通过 适当地自定义GCC规范文件,或通过适当的方式 指定CPATH和相关的环境变量,其他 复杂性和维护开销可能被认为是不可接受的 对许多用户而言。)

总而言之,他们说GCC规范文件或CPATH作为“真正的第三方库集成”的选项对于“正常”用户来说是过多的额外维护开销,我们应该像下面的示例中那样调用:

hello.c:

# A tibble: 10 x 2
   number_list count
         <int> <int>
 1         248     0
 2         650     0
 3         705     1
 4         816     2
 5         872     2
 6         991     2
 7        1156     1
 8        1157     2
 9        1180     3
10        1277     3

我使用mariadb连接器包含mysql.h,其中include和lib与gcc默认值分开保存。可以从命令行调用(我是include,L是库,这些字母后的空格是可选的)

#include <stdio.h>
#include <mysql.h>
int main()
{
    printf("Hello world\n");
    return 0;
}

如果您想在VS Code中运行构建任务,建议您使用扩展名 C / C ++编译运行(扩展名:danielpinto8zz6.c-cpp-compile-run) 通过按F7键,然后仅输入参数:

gcc -o hello hello.c -I "C:\\Program Files\\MariaDB\\MariaDB Connector C 64-bit\\include" -L "C:\\Program Files\\MariaDB\\MariaDB Connector C 64-bit\\lib\\" -lmariadbclient

c_cpp_properties.json必须如下所示:

-I "C:\\Program Files\\MariaDB\\MariaDB Connector C 64-bit\\include" -L "C:\\Program Files\\MariaDB\\MariaDB Connector C 64-bit\\lib\\" -lmariadbclient

这是从这里重复的答案或其他类似的问题,但是它们并没有帮助我使它真正迅速开始,这就是为什么我发布了新的答案。