我刚刚在this post
之后设置了MinGW环境但是如何添加第三方库呢?
答案 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
现在使用适当-Lfoo/bar -lfoobar
开关的新库。
答案 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
这是从这里重复的答案或其他类似的问题,但是它们并没有帮助我使它真正迅速开始,这就是为什么我发布了新的答案。