繁体   English   中英

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

[英]C program compiling in Netbeans, but not compiling in cmd with gcc

我有一个C程序,一直在尝试将http://libmodbus.org/添加到我的项目中。 我是C语言的新手,但痛苦地找到了足够的方法来进行./configure && make install和创建该库所需的所有其他操作。 现在,我从此链接https://forums.netbeans.org/ptopic29782.html添加了头文件的位置和libmodbus.dll.a文件的位置。

现在,我在netbeans中编译程序,编译正常,但是当我尝试运行程序时,收到了undefined reference to modbus_new_rtuundefined 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找不到该方法时,它说未定义。

我该如何解决?

任何帮助深表感谢。 谢谢! -狄龙

这里有两个单独的问题。

像您要尝试从源代码创建可执行文件一样,创建可执行文件有两个阶段-第一个阶段称为编译,第二个阶段称为链接。 很多时候,我们将整个过程称为编译,但实际上,您必须以更高的分辨率来理解它。

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

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

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

关于gcc的不错的教程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM