【发布时间】:2010-12-31 10:36:44
【问题描述】:
我刚刚在this post之后设置了MinGW环境
但是如何添加第三方库呢?
【问题讨论】:
标签: mingw
我刚刚在this post之后设置了MinGW环境
但是如何添加第三方库呢?
【问题讨论】:
标签: mingw
【讨论】:
库由两个主要组件组成 - C 头文件和编译的目标代码存档。 GCC 有一系列令人眼花缭乱的方式来指定这些东西,但是假设您使用的是位于相对目录路径 foo/lib 中的库 foo.a 和位于 foo/inc 中的标头 foo.h。您自己的 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 路径,但事情开始变得复杂 :-)
【讨论】:
我只是自己解决了这个问题。我强烈建议阅读 MinGW 网页上的 linking howtos。仔细阅读它们,因为其中包含很多内容。它们非常透彻,因此非常值得您花时间。
基本上有两种做事方式。首先,您可以将 MinGW 视为编译器,因为它就是这样,并从 cmd.exe(命令提示符)或 IDE 调用它。另一种方法是使用 MSYS,它基本上是一个 Unix 风格的 shell,你可以在 Windows 上运行它来使用 Unix 风格的构建工具,比如 configure 和 make。
对于其中任何一个,您都必须阅读我上面链接的操作指南,以了解如何搜索依赖路径。我犹豫在这里解释它,因为它已经在 howtos 中进行了解释,并且复制该信息不是一个好主意。如果您在阅读后有具体问题,我很乐意提供更多帮助。
【讨论】:
由于我花了几个小时研究 SO 才能让这个第 3 方在 MinGW 下运行,所以一个明显的例子可能会帮助像我一样对这个主题不熟悉的其他人。问题是如何添加第 3 方库,答案是:您最好不要真正添加它们,您只需将它们用作参数(如 @anon 所述)。 我参考@kjoppy 的链接推荐。来自http://mingw.org/wiki/IncludePathHOWTO,底部:
作为选项 (2) 的变体,创建一个单独的目录层次结构, 对于每个单独的外部库包都在本地 已安装;这减轻了选项 (1) 的所有缺点,并且 选项(2)的包混合,但它会产生一个替代方案 惩罚:--与选项(2)一样,适当的“-I DIR”和“-L DIR” 必须将选项添加到每个 GCC 调用中;然而,而选项 (2) 每种类型只需要一个额外的路径,这个选项 对于每个外部,每种类型都需要一个额外的 要部署的库。 (虽然这仍然可以通过 适当定制 GCC 规范文件,或通过适当的 指定 CPATH 和相关的环境变量,附加的 复杂性和维护开销可能被认为是不可接受的 对许多用户)。
总结起来,他们说 GCC Specs File 或 CPATH 作为“真正的 3rd 方库集成”的选项对于“普通”用户来说额外的维护开销太大了,我们宁愿像下面的例子那样调用:
你好.c:
#include <stdio.h>
#include <mysql.h>
int main()
{
printf("Hello world\n");
return 0;
}
我使用 mariadb 连接器包含 mysql.h,其中包含和 lib 与 gcc 默认值分开保存。这可以从命令行调用(I 是包含,L 是库,这些字母后面的空格是可选的)
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
如果您想在 VS Code 中运行构建任务,我建议使用扩展 C/C++ 编译运行(扩展 id:danielpinto8zz6.c-cpp-compile-run) 按 F7 然后只输入参数:
-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 必须如下所示:
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
"C:\\Program Files\\MariaDB\\MariaDB Connector C 64-bit\\include"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "C:\\Program Files (x86)\\mingw-w64\\i686-8.1.0-posix-dwarf-rt_v6-rev0\\mingw32\\bin\\gcc.exe",
"cStandard": "c11",
"cppStandard": "gnu++14",
"intelliSenseMode": "clang-x86"
}
],
"version": 4
}
这是重复此处的一些答案或其他类似问题,但它们对我的帮助不足以真正快速开始,这就是我发布新答案的原因。
【讨论】: