2015-10-17 29 views
0

我想運行從Bealgebone到4D系統顯示的串行命令。因此,我複製了C庫發現here到一個目錄,並創建了一個測試程序的main.c:鏈接一個庫與Linux中的C程序的問題

#include "Picaso_const4D.h" 
#include "Picaso_Serial_4DLibrary.h" 

int main(int argc,char *argv[]) 
{ 
    OpenComm("/dev/ttyUSB0", B115200); // Matches with the display "Comms" rate 
    gfx_BGcolour(0xFFFF); 
    gfx_Cls(); 
    gfx_CircleFilled(120,160,80,BLUE); 
    while (1) {} 
} 

現在,當我做gcc -o main main.c它說

main.c:2:37: fatal error: Picaso_Serial_4DLibrary.h: No such file or directory

所以我儘量將它鏈接:

gcc main.c -L. -lPICASO_SERIAL_4DLIBRARY 

這給了我同樣的錯誤。然後我試圖創建一個靜態庫:

gcc -Wall -g -c -o PICASO_SERIAL_4DLIBRARY PICASO_SERIAL_4DLIBRARY.C 

,給了我這樣的:

PICASO_SERIAL_4DLIBRARY.C:1:21: fatal error: windows.h: No such file or directory compilation terminated.

我在做什麼錯? git頁面清楚地表明這個庫是爲不運行Windows的人創建的。

在此先感謝!

+0

另一個很好的理由將編譯步驟從鏈接步驟中分離出來。在任何情況下,編譯步驟都需要根據您的問題使用參數'-I user3629249

+0

,該庫安裝在與源文件相同的目錄中。相關的頭文件是否也安裝在同一個目錄中?如果是這樣,編譯時間參數將是'-I'(這是一個資本眼球) – user3629249

+0

努力創建共享庫是一個兩步過程:1)'gcc -c -fPIC calc_mean.c -o calc_mean。 o' 2)'gcc -shared -Wl,-soname,libmean.so.1 -o libmean.so.1.0.1 calc_mean.o' – user3629249

回答

3

您沒有收到鏈接錯誤;你會得到一個預處理器錯誤。具體而言,您的預處理器無法找到Picaso_Serial_4DLibrary.h。確保它位於包含路徑中;您可以使用參數gcc的-I參數將目錄添加到包含路徑中。

+0

ahhh kkk所以這樣? 'gcc main.c -Wall -L。 -lPICASO_SERIAL_4DLIBRARY -I/path/to/4Dsystems/C/Include'? – Tom

+0

因爲不起作用 – Tom

+0

那麼你現在得到什麼錯誤? – user3553031

3

你有兩個問題。首先是無法找到的picaso_whatever.h文件。你用我添加的-I來修復它。但是,現在,picaso.h想要windows.h

你在建什麼? WinX或BSD/Linux?

如果你在WinX上編譯,你需要爲visual studio安裝「platform sdk」。

如果你使用的是mingw或cygwin,你需要做其他的事情。

如果在WinX上,則cd到C:目錄。執行find . -type f -name windows.h併爲包含目錄添加-I。

如果在Linux下,請在源代碼樹頂層重複查找。否則,可能需要安裝一些兼容性跨構建庫。

或者,您必須找到WinX,因爲Picaso明確包含它。你可以嘗試評論一個或多個#include,看看事情是好還是壞。

如果你找不到真正的,請創建一個空的windows.h並添加-I,看看有多壞(或好)。

您可能需要mingw交叉編譯器。見https://forums.wxwidgets.org/viewtopic.php?t=7729

UPDATE:

好了...哇...你是在正確的軌道和近,但是這是,海事組織,醜陋的WinX東西。

Picaso的主要需求是獲得一個串行通信端口連接,所以在windows.h中的需求[很幸運]是最小的。它需要WORD,DWORD等的基本樣板定義。

mingw或cygwin將提供自己的windows.h副本。這些都是「潔淨室」的重新實施,所以沒有版權問題。

mingw是一個彙編/編譯工具,可以讓你使用gcc/ld/make build工具。

cygwin更像是:我想要一個類似於BSD/Linux的完整殼狀環境。你會得到bash,ls,gcc,tar,以及任何你想要的GNU工具。

警告:我使用cygwin,但從未使用過mingw。其他項目(例如cygwin,wine)可以重用windows.h的mingw版本(以及它下面包含的一系列.h文件),它們是開源的。

在Linux下,wine(windows模擬器)是一個程序/套件,它允許您在Linux下運行WinX二進制文件(例如wine mywinpgm)。

我GIT克隆了畢加索圖書館和一些擺弄後,我能得到它它指向酒的版本WINDOWS.H

畢加索的OpenComm做的CreateFile [一個Win32 API調用]之後編譯。所以,你可能需要cygwin。你打開/ dev/ttyUSB0。/dev/*意味着cygwin。但是,/ dev/ttyUSB0是一個類似Linux的名稱。您可能需要一些WinX風格的名稱,如「COM:」或其他。在cygwin終端[給你一個bash提示符]下,執行ls/dev並查看可用的。

您可以從以下地址獲取cygwin:http://cygwin.com/如果您有64位系統,請務必使用64位版本的安裝程序:setup-x86_64.exe它是半圖形的,需要兩個目錄,一個用於「根「FS和一個存儲包。在我的系統中,我使用C:\ cygwin64和C:\ cygwin64_packages - YMMV。

請注意,安裝程序默認情況下不會安裝gcc。您可以[圖形]選擇要安裝的軟件包。您可能還需要一些「開發」軟件包。他們有非開發人員不需要的庫和.h文件。正如文檔所述,您可以根據需要隨時重新運行安裝程序。您可以添加忘記指定的軟件包,甚至可以刪除您不再需要的軟件包。

請記住,您需要適當調整makefile -I和/或-L選項。另外,在構建picaso庫時,gcc會產生大量關於「大整數」溢出的警告。該代碼是:

#define control_code -279 
unsigned char buf[2]; 
buf[0] = control_code >> 8; 
buf[1] = control_code; 

該代碼是好的,並且警告是正確的[因爲代碼是草率]。如果代碼已經完成:

#define control_code -279 
unsigned char buf[2]; 
buf[0] = (unsigned) control_code >> 8; 
buf[1] = (unsigned) control_code; 

它可能會保持沉默。使用你的Makefile中的Wno溢出來擺脫警告,而不是編輯50左右的行

+0

嗨,謝謝!我先在Linux上嘗試,然後切換到Windows。我用這個設置http://www.wikihow.com/Compile-a-C-Program-Using-the-GNU-Compiler-(GCC)。 – Tom

+0

這就是你的意思與WinX,我找不到這樣的程序。對不起noob問題 – Tom

+0

@PaulBernhardWagner WinX的意思是[順序]以下任何或全部:win95,win98,winNT,winXP,vista,win7,win8,win10 :-)我也被稱爲使用「windoze」: - )我已經對我的答案進行了重大更新,並提供了一些可幫助您解決剩餘問題的詳細信息。 –