在C程序中使用外部库

时间:2009-08-16 19:15:28

标签: c dll

对我来说(C语言中的初学者)看起来程序可以通过在C源文件的顶部声明#include "something.h"来神奇地访问外部库。怎么做?

我想使用POSIX库(unistd.h)。我有头文件本身和几个dll,但我无法将它们链接在一起并让编译器(GCC MinGW)找到dll。

关于如何生成和链接dll以及如何将dll连接到C头以及类似的东西有什么好的教程?

4 个答案:

答案 0 :(得分:2)

你的假设是错误的 - 头文件不会让你神奇地访问DLL。头文件不是库,只有头文件不允许你调用它声明的函数。在任何情况下,MinGW都带有unistd.h - 您不需要任何额外的头文件或DLL,但请注意并非所有POSIX功能都可以在普通的Windows环境中使用。如果您想在Windows上使用POSIX环境,请使用Cygwin,而不是MinGW。

答案 1 :(得分:1)

.h文件只能让您的程序知道在编译链接过程中哪些入口点可用。

我建议您查看编译器文档,了解如何指定链接.dll。

你可能会开始搜索像-l这样的标志来指定你要导入的.dll。

答案 2 :(得分:1)

虽然Neil和Norman的答案在技术上是正确的,但某些编译器(如MSVC)实际上允许纯粹的#include神奇地链接到正确的库。这是使用包含的.h文件中的特殊指令完成的,如下所示:

  

#pragma comment(lib,“library.lib”)

  

#pragma comment(链接器,“/ DELAYLOAD:libib.dll”)

然后,编译器将注释嵌入到生成的目标文件(.o或.obj)中,链接器将其提取并将其附加到选项中。

答案 3 :(得分:0)

C这种方式非常糟糕:将正确的DLL与正确的.h文件连接起来完全取决于程序员。这涉及很多编程/文件系统约定,很容易出错,初学者很难学习。

前段时间我写了short handout on compiling and linking with Unix libraries。 Windows上的细节不尽相同,但我希望这些概念可能有用。