單使用GCC編譯Keil下工程C檔案
不得不說Keil貌似是國內使用者使用最多的IDE了,其被ARM收購之後,ARM嵌入了ARMCC等編譯器推出了Keil MDK開發環境更是受到了廣大ARM開發工程師的歡迎,龐大的使用者群(很多是從當年的51等8位機直接轉過來的)、簡潔的管理視窗和友好的UI介面等優勢都讓其風靡一時,而且畢竟現在成了ARM的“親兒子”了,其對ARM核心的產品支援還是灰常不錯的。
而GCC更是大名鼎鼎,這個至今仍然在維護的GNU專案下的產物,在N多大牛的維護下不斷得到優化,其強大的編譯效率和跨平臺能力也是廣為大家所認可(Codewarrior10.x之後,針對ARM的編譯器就是集成了GCC)。
而本文的目的是針對那些想從GCC平臺遷移到Keil MDK平臺的開發者(並不是代表ARMCC比GCC好,這裡不拿這兩者做對比),可能用習慣了GCC的話移植到ARMCC下會有些差別需要注意,如匿名的聯合體union在ARMCC下是不支援的,要想再ARMCC下使用需要在前面新增“#pragma anon_unions”,而這種格式在GCC卻是直接支援的。
而如果開發者想將原來在GCC下的工程整體遷移到Kei MDK下,如果工程裡存在大量的這種定義,那認為的一條條的修改絕對是一件讓人抓破頭皮的事,呵呵,那有沒有簡單的一蹴而就的方法呢?咳咳,我都這樣說了那肯定就有啦,有點賣關子了,呵呵,其實很簡單,我們進入到Project->Options…,設定如下圖所示,即新增“--gnu”即可實現在Keil工程下使用GNU工具鏈GCC來編譯工程C檔案了,是不是有點太簡單了,呵呵。
最後我需要提一句,這個“--gnu”是新增在C/C++這個選項卡下的,如果你最開始使用Keil重新新建的一個工程並添加了Keil自動生成的啟動程式碼的話(startup_xxx.s)請慎用在ASM選項卡下新增“--gnu”,因為ARMCC下的彙編格式是與GCC完全不一樣的,所以用GCC來編譯Keil下生成的彙編是不行的,這點需要注意。
糾正:謝謝下面博友的更正,“--gnu”實際上是在ARMCC中加入支援GNU擴充套件格式,當然實際上Keil是可以新增GCC的編譯器的,通過keil選單中“Project > Manage > Components, Environment, Books..”新增,前提是你得提前裝好GCC編譯器。
相關推薦
單使用GCC編譯Keil下工程C檔案
不得不說Keil貌似是國內使用者使用最多的IDE了,其被ARM收購之後,ARM嵌入了ARMCC等編譯器推出了Keil MDK開發環境更是受到了廣大ARM開發工程師的歡迎,龐大的使用者群(很多是從當年的51等8位機直接轉過來的)、簡潔的管理視窗和友好的UI介面等優勢都讓其風
使用Dev C++建立工程檔案呼叫不同檔案下的c檔案
在學校嵌入式軟體小組課上直播翻車,很尷尬 !!!! 然後我結束以後仔細找了一歘啊錯誤原來是因為沒有主一標頭檔案的包含形式導致的 我先介紹一下C語言包含標頭檔案時<>和""區別 我在剛學的時候就有一種疑惑 ,為什麼學長的資料夾下面包含標頭檔案有時候就是#inclu
Golang 在windows下編譯Linux下可執行檔案
Golang 支援交叉編譯,在一個平臺上生成另一個平臺的可執行程式,最近使用了一下,非常好用,這裡備忘一下。 Windows 下編譯Linux 64位可執行程式 SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go
gcc編譯連結時標頭檔案和庫檔案的搜尋順序
編譯:找符號定義 連結:找實現 執行:執行 靜態庫連結時直接寫程序序裡了 動態庫連結時只連結到了一些地址資訊,需要到執行時再進行動態載入 編譯時搜尋標頭檔案的順序: 1. gcc先找-I設定的路徑 2. 再找gcc的環境變數C_INCLUDE_PATH, CPLU
單目跟蹤位姿產品研發(二)----在linux下將c++工程打包成動態庫so檔案API
單目跟蹤位姿專案由對方公司提供應用場景,我方研發核心演算法,通過c++實現功能,然後對方公司通過java\js來開發炫酷的介面,共同合作完成,最終對方公司負責銷售推廣,推向市場。因此,涉及到java介面呼叫c++核心程式碼的問題。 現記錄
gcc 或 g++ 下 C 或 C++ 檔案編譯過程
文章目錄 一、檔案字尾名含義 二、編譯步驟 三、每個編譯步驟對應的編譯選項 四、參考資料 一、檔案字尾名含義 字尾名 語言種類 後期操作
linux下gcc編譯 .c檔案生成動態連結庫 .so檔案,並測試呼叫該連結庫
簡單介紹:linux中so檔案為共享庫,和windows下dll相似;so可以共多個程序呼叫,不同程序呼叫同一個so檔案,所使用so檔案不同;so原檔案不需要main函式;例項,1.通過mysqlTest.c中的函式mysql(),生成一個libmysql.so連結庫#inc
mingw下用gcc編譯c檔案出現no such file or directory解決方法
c檔案直接拖進cmd時地址是對的,但gcc不認空格,所以要把路徑當做所有空格都去掉或改成“—”,這樣它就能直接發現檔案了,這時在cmd中編寫:gcc F:\new.c -o F:\new.exe ,就會出現new.e
linux下用gcc編譯c程式時遇到的問題: error: stdio.h: 沒有那個檔案或目錄
原因是沒有安裝libc6-dev的軟體包。命令列下輸入apt-get install build-essential即可。這個build-essential是幹什麼的呢?原來build-essential是一個列表,包含了編譯debian包必需的大部分元件。安裝完之後,順利解
Linux下多個檔案的C++工程編寫、編譯要點
編譯流程: 假定有三個檔案:main.cpp: #include <iostream> #include "include/func1.hpp" int main(){ cout<<"this is main"<<endl; fu
KEIL 工程下 編譯生成 hex和 bin檔案
1、生成hex(這個應該都會吧...)點選選項 按鈕 如下圖選擇Output 然後在Create HEX file前面打鉤...確定即可2、生成bin 同樣點選1中所說的option , 然後點選User, 然後在After Build/Rebuild 下的 R
linux下使用gcc編譯運行C程序
images 鏈接 cnblogs bin collect 運行 ffffff alt 兩種 gcc(GNU Compiler Collection)是Linux下最常用的C語言編譯器,是GNU項目中符合ANSI C標準的編譯系統,能夠編譯用C、C++和Object C等語
c++ include包含工程目錄下的.h檔案,報錯:fatal error C1083: 無法開啟包括檔案:“Sales_item.h”: No such file or directory
背景:刷c++primer的題目,將下載的某個標頭檔案拖拽到自己建立的工程目錄下,在自己新建的原始檔中include包含時,報無法開啟檔案 明明有檔案 為什麼說無法開啟呢 於是到本地的工程目錄中開啟一看,果然沒有這個檔案 說明通過滑鼠拖拽檔案進入到工程樹上面,檔案並沒
gcc和g++編譯c或者c++檔案碰到的問題
gcc和g++都是GNU(組織)的一個編譯器。 誤區一:gcc只能編譯c程式碼,g++只能編譯c++程式碼 兩者都可以,但是請注意:
linux64位下無法編譯c檔案的解決方法
來源 出現的問題 test.c:1:19: fatal error: stdio.h: 沒有那個檔案或目錄 解決 可以在命令列輸入如下的命令進行安裝: sudo apt-ge
C語言-GCC編譯多個C檔案
20180207-GCC編譯多個C檔案GCC編譯多個C檔案下午做了一個小的程式,定義了三個檔案:getop.h,getop.c,calcDemo.c顯然getop.h是針對getop.c的,而在calcDemo.c中要呼叫到getop.c中的東西。首先給出每個檔案的結構圖,為
關於如何在make一個Linux下的C/C++工程時,自動新增版本號、編譯日期等資訊
本篇的目的:在makefile裡,將系統當前的時間傳遞進待編譯的C/C++工程中,用以指示編譯執行的時間,以及版本資訊等。 不多說了,先來看效果: 當前時間:2017.01.20 0:29 編譯完成後執行效果: [email protected]:~/Desk
不用vs,c 語言windows下編寫socket,用gcc編譯
windows下socket一般都要vs,因為socket執行庫可能在win-sdk裡 反正在system32裡我沒找到ws2.32.lib,因此需要下載一份這個,如果能在其他地方找到也可以,點選這裡可以WS2.32下載我上傳到雲盤裡的檔案,密碼:10nc。
win7下使用Eclipse編譯C檔案生成exe
嵌入式開發過程中需要經常除錯和驗證小功能,比如排序、CRC等。如果直接硬體模擬,比較浪費時間。不如直接在計算機上驗證完成以後再移植到嵌入式系統中。這樣不需要硬體環境也能夠編碼。 這裡選用Eclipse當做計算機開發環境。在Windows 7下,
Linux下gcc編譯生成動態連結庫*.so檔案並呼叫它
動態庫*.so在linux下用c和c++程式設計時經常會碰到,最近在網站找了幾篇文章介紹動態庫的編譯和連結,總算搞懂了這個之前一直不太瞭解得東東,這裡做個筆記,也為其它正為動態庫連結庫而苦惱的兄弟們提供一點幫助。1、動態庫的編譯下面通過一個例子來介紹如何生成一個動態庫。這裡