2017-06-01 179 views
0

我有一個C程序,並試圖將http://libmodbus.org/添加到我的項目中。我是C新手,但痛苦地找到了足夠的方法./configure & &使安裝和創建庫所需的一切。 現在,我已經從這個鏈接加到我的libmodbus.dll.a文件的頭文件和位置的位置https://forums.netbeans.org/ptopic29782.html在Netbeans中編譯C程序,但不能用cmcc編譯gcc

現在,我編譯我的程序在NetBeans中,它編譯罰款,但是當我嘗試運行程序,我收到undefined reference to modbus_new_rtu

當我嘗試編譯main.c文件只是自己在cmd中這樣

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

這裏有兩個獨立的問題。

創建一個類似於您試圖從源代碼創建的可執行文件有兩個階段 - 第一階段稱爲編譯,第二階段稱爲鏈接。很多時候我們把整個過程稱爲編譯,但是你真的編譯你必須以更高的分辨率來理解它。

  • No such file or directory是編譯錯誤,是由於沒有提到編譯命令中的include目錄。您自己說過,缺少的頭文件所在的目錄與編譯目錄不同。使用選項-I,後跟該目錄的路徑。 在Netbeans中可能不會發生這種情況,因爲IDE在編譯代碼時會在哪些目錄中查找/包含文件,並且具有自己的默認(但通常是可配置的)定義。
  • undefined reference是一個鏈接錯誤。它發生在代碼中時,您引用了另一個源文件或庫中定義的某個元素(變量/函數/結構體),但鏈接程序未找到此定義。你的代碼和這個庫應該是鏈接。使用gcc選項-l,後跟該目錄的路徑。

關於你的問題你的最後一段 - 要明白#include <modbus.h>無關與undefined reference是很重要的。包括被檢查在編譯時間。在鏈接時間找到未定義的參考,只有在編譯階段成功後纔會提供。

閱讀更多關於編譯和鏈接以更好地理解。

A nice tutorial about gcc。