在Netbeans中编译C程序,但没有使用gcc

时间:2017-06-01 01:19:06

标签: c gcc netbeans undefined-reference modbus

我有一个C程序,并且一直在尝试将http://libmodbus.org/添加到我的项目中。我是C的新手,但痛苦地找到了我的方式./configure&& make install以及创建库所需的一切。 现在,我已经从此链接添加了头文件的位置和我的libmodbus.dll.a文件的位置https://forums.netbeans.org/ptopic29782.html

现在,我在netbeans中编译我的程序,它编译得很好,但是当我尝试运行程序时,我收到undefined reference to modbus_new_rtu

当我尝试在cmd中编译main.c文件时,就像这样

C:\Users\Jensen Home PC\Documents\NetBeansProjects\Modbus_Project>gcc main.c

我收到了

main.c:4:20: fatal error: modbus.h: No such file or directory 

如果相关或有帮助, 这是我的头文件的路径

C:\MinGW\msys\1.0\local\include\modbus

和我的libmodbus.dll.a文件,(当我在netbeans中添加它时,我只提供文件夹C:\MinGW\msys\1.0\local\lib,因为它不允许我选择文件而只是文件夹)

C:\MinGW\msys\1.0\local\lib\libmodbus.dll.a

那么这个问题是什么?我已经研究过很多关于SO的未定义参考问题,但它似乎并不能解释为什么我不能用gcc编译。看起来我得到一个未定义的引用,因为我的#include <modbus.h>实际上并不是首先包含该文件,但由于某种原因Netbeans认为我有,所以当Netbeans找不到该方法时,它表示未定义。

我该如何解决这个问题?

非常感谢任何帮助。谢谢! - 狄龙

1 个答案:

答案 0 :(得分:1)

这里有两个不同的问题。

创建像你这样的可执行文件尝试从源代码创建有两个阶段 - 第一个叫做编译,第二个叫做链接。很多时候我们称整个过程只是编译,但你真的编译你必须以更高的分辨率来理解它。

  • No such file or directory是编译错误,原因是未在编译命令中提及include目录。您自己说,缺少的头文件所在的目录与编译目录不同。使用选项-I,后跟目录的路径。 它可能不会发生在Netbeans中,因为IDE在编译代码时有哪些目录可以查看/包含文件,从而有自己的默认(但通常是可配置的)定义。
  • undefined reference是链接器错误。当您在代码中引用在另一个源文件或库中定义的某个元素(变量/函数/结构)时,会发生这种情况,但链接器并未找到此定义。您的代码和此库应该链接。使用gcc选项-l,后跟该目录的路径。

关于您问题的最后一段 - 了解#include <modbus.h>undefined reference无关,这一点非常重要。包含在编译时检查。未定义的引用位于链接时间,仅在成功编译阶段后才会出现。

阅读有关编译和链接的更多信息,以便更好地理解。

关于gcc的nice tutorial