【发布时间】:2016-01-28 17:51:38
【问题描述】:
我有一个扩展名为 .a 的文件,而 file.h 则代表 .a 文件中的函数。
如何从新的 C 项目调用 .a 文件中的函数?
我正在使用 Visual Studio,我在整个互联网上搜索并没有 发现了一些有用的东西。
谢谢
【问题讨论】:
标签: c visual-studio static-libraries .a
我有一个扩展名为 .a 的文件,而 file.h 则代表 .a 文件中的函数。
如何从新的 C 项目调用 .a 文件中的函数?
我正在使用 Visual Studio,我在整个互联网上搜索并没有 发现了一些有用的东西。
谢谢
【问题讨论】:
标签: c visual-studio static-libraries .a
#include 'xxx.h"
然后在代码中,假设 ABC 是库中的一个函数,调用它即可: int x = ABC();
您还必须将程序与库链接。
【讨论】:
在 Visual Studio 项目中使用外部库有两个步骤:您需要同时满足 compiler 和 linker。
编译器
这就像在应用程序中包含头文件一样简单;将头文件直接放在源代码树中,或者,如果它位于另一个目录中,请将其添加到包含路径(右键单击项目->属性,选择“C/C++”并将目录添加到“附加包含目录”属性)。
您现在应该能够#include "myexternallibrary.h" 没有问题,这将允许编译器识别库函数。
链接器
一般来说,为了满足链接器,指令与上面的头文件非常相似:将库二进制文件直接转储到您的项目树中,并通过 Properties->Linker->Input->“Additional Dependencies” 引用它(例如, 图书馆.a);如果库位于项目树外部的目录中,并且您不想在此属性中包含库的完整路径,则可以将该目录添加到链接器的搜索路径中:Properties->Linker->General ->“其他库目录”。
由于您明确声明库文件是 .a 格式,而不是 .lib 格式,因此事情会变得有些棘手。
.a 库文件通常来自 MinGW 工具链,它可能会也可能不会与您的 Visual Studio 工具链一起正常工作。详情见相关:From MinGW static library (.a) to Visual Studio static library (.lib)
您可能会很幸运,并且库对标准 C 运行时的使用在 MSVC 和 MinGW(或生成 .a 文件的任何工具链)之间兼容。
附带说明,请确保您尝试使用的库实际上不是 Linux 库,因为 .a 库扩展名也是 GCC(最常见的 C Linux 编译器),在 Windows 环境下不兼容。
【讨论】: