C程序在Netbeans中编译,但不使用gcc在cmd中编译

C程序在Netbeans中编译,但不使用gcc在cmd中编译,c,gcc,netbeans,undefined-reference,modbus,C,Gcc,Netbeans,Undefined Reference,Modbus,我有一个C程序,并一直试图添加到我的项目。我是C新手,但我痛苦地找到了创建库所需的./configure&&makeinstall和其他一切。 现在,我已经从这个链接添加了头文件的位置和libmodbus.dll.a文件的位置 现在,我用netbeans编译我的程序,它编译得很好,但当我尝试运行该程序时,我收到一个对modbus_new_rtu的未定义引用 当我试图像这样用cmd编译main.c文件时 C:\Users\Jensen Home PC\Documents\NetBeansProje

我有一个C程序,并一直试图添加到我的项目。我是C新手,但我痛苦地找到了创建库所需的./configure&&makeinstall和其他一切。 现在,我已经从这个链接添加了头文件的位置和libmodbus.dll.a文件的位置

现在,我用netbeans编译我的程序,它编译得很好,但当我尝试运行该程序时,我收到一个对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一开始并没有实际包含该文件,但出于某种原因,Netbeans认为我有,所以当Netbeans找不到该方法时,它会说未定义

我该如何解决这个问题


非常感谢您的帮助。谢谢狄龙这里有两个不同的问题

像您试图从源代码创建可执行文件一样,创建可执行文件有两个阶段——第一个阶段称为编译,第二个阶段称为链接。很多时候,我们把整个过程称为编译,但是如果你真的编译了,你必须以更高的分辨率来理解它

没有这样的文件或目录是编译错误,这是因为在编译命令中没有提到include目录。您自己说过,丢失的头文件所在的目录与编译目录不同。使用选项-I,后跟该选项的目录路径。 这种情况可能不会发生在Netbeans中,因为IDE在编译代码时有自己的默认定义,但通常是可配置的定义,用于查看/包含文件的目录。 未定义引用是链接器错误。当在代码中引用在另一个源文件或库中定义的某个元素变量/函数/结构,但链接器找不到此定义时,就会发生这种情况。您的代码应该与此库链接。使用gcc选项-l,后跟该选项的目录路径。 关于你问题的最后一段,重要的是要理解include与未定义的引用无关。在编译时检查include。未定义的引用是在链接时找到的,只有在成功编译阶段之后才能找到

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

关于gcc的一个例子