Ⅰ 急急!c++編譯器的選項和調用!
不論是不是用IDE, 和編譯結果是控制台APP 還是WIN32APP, 沒有關系的。
為什麼要用CL 編譯win32程序,不用IDE? 原因何在?
CL編譯win32肯定沒問題的,具體用法可以參考CL幫助, 我記得很簡單的, 給你示例如下:
C:Program Files (x86)Microsoft Visual Studio 11.0VCin>vcvars32.bat
C:Program Files (x86)Microsoft Visual Studio 11.0VCin>cl
Microsoft (R) C/C++ Optimizing Compiler Version 17.00.61030 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
usage: cl [ option... ] filename... [ /link linkoption... ]
┈┈來自:網路香港交流吧, 誠邀大家幫忙關注!!!
Ⅱ 如何設置編譯選項 ubuntu
這個就要看你的具體的編譯器了。例如:在 UBUNTU 系統下,使用的是 gcc C 語言編譯器,那麼就一定要遵循 gcc 的編譯選項規定。例如:gcc myfile.c,該命令產生的是一個預設的輸出運行文件 a.out;gcc -o myrunfile myfile.c,該命令將會產生一個輸出文件為 myrunfile 的運行文件;gcc -c myfile.c,該命令是只產生一個 myfile.o 的中間文件,只編譯、不連接。除此之外,你還需要注意 makefile 文件的編寫規則,因為該文件才是真正要把所有的源程序的編譯選項按照一定的規則寫到 makefile 文件中,然後再整體對源程序進行編譯、連接。
Ⅲ codeblocks 12.11編譯器怎麼選擇
首先在編譯器設置中設置為 vc 2010即可。
但是只安裝vc 2010的話,在vc的bin目錄中無法找到rc.exe和cdb.exe。
rc.exe可以從C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin目錄下找到。你也可以把rc.exe 和rcdll.dll拷貝到vc的bin目錄下。
cdb.exe無法找到,你必須下載 Debugging Tools for Windows 。當然這個東西沒有單獨的包可下載,你可以下載Microsoft Windows SDK for Windows 7 and .NET Framework。這個東西現在只需先下載一個500k的引導程序,然後其他的都不要,只要Debugging Tools for Windows就好了。
安裝好的cdb.exe在C:\Program Files\Debugging Tools for Windows (x86)目錄下,你需要在compiler and debugger settings中的Toolchain executables選項的additional paths中增加這個目錄以便codeblocks查找它。
ok,現在你可以用目前最棒的c++編輯器和最棒的c++編譯器了:)
或許你在編譯一個帶資源文件的工程,而這個資源文件#include <windows.h>時,你又會遇到問題:致命錯誤 RC1015: 無法打開包含文件 'windows.h'。還是一樣在compiler and debugger settings中的search directories設置中為編譯、鏈接、資源編譯三個選項加上下面這個查找目錄:
C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include
Ⅳ 中如下的編譯選項什麼意思
1.編譯目標文件
icc -c -offload-attribute-target=mic -O3 -openmp -std=c99 -DMKL_ILP64 -I/opt/intel/composer_xe_2013_sp1.1.106/mkl/include fft.c -o fft_new.o
2.連接產生可執行文件
icc fft_new.o -openmp -Wl,--start-group /opt/intel/composer_xe_2013_sp1.2.144/mkl/lib/intel64/libmkl_intel_ilp64.a /opt/intel/composer_xe_2013_sp1.2.144/mkl/lib/intel64/libmkl_intel_thread.a /opt/intel/composer_xe_2013_sp1.2.144/mkl/lib/intel64/libmkl_core.a -Wl,--end-group -Ip-offload-option,mic,compiler,"-Wl,--start-group /opt/intel/composer_xe_2013_sp1.2.144/mkl/lib/mic/libmkl_intel_ilp64.a /opt/intel/composer_xe_2013mkl/lib/mic/libmkl_intel_thread.a /opt/intel/composer_xe_2013_sp1.2.144/mkl/lib/mic/libmkl_core.a -Wl,--end-group" -o fft_new.out
這里的東西較多,看上去比較復雜。
1.對於第一步,編譯出目標文件。這裡面的幾個編譯選項:
-O3 :表示最大可能優化級別。各種循環優化都執行了,並且各種文件級性質也用來改善性能
-openmp:採用了openmp並行編程
-std=c99:ANSI C是89年成為了標准,被ISO認證。之後99年ISO更新了新的C標准。所以-std用來指明編譯的C標准。在某些情況下,如果使用GCC,可能在有沖突的時候使用其他標准,比如:-std=gnu89
-DMKL_ILP64:這個是intel提供的編譯選項,主要是一個平台的指示。
-I:指定頭文件目錄
-o:重命名。
2.對於第二步,鏈接過程。其中幾個編譯選項:
-openmp:同上
-Wl:Wl選項告訴編譯器將後面的參數傳遞給鏈接器。
--start-group 和--stop-group:庫文件參數傳遞的開始和結束。
--offload-option,mic:使用offload方式使用協處理器進行運算
轉自CSDN社區beglorious的專欄
Ⅳ C++編譯器裡面的工程選項是什麼意思
編譯器和鏈接器的設置選項。
編譯器和鏈接器根據這些選項編譯鏈接,生成可執行文件。
Ⅵ linux 編譯選項
gcc -E source_file.c
-E,只執行到預編譯。直接輸出預編譯結果。
gcc -S source_file.c
-S,只執行到源代碼到匯編代碼的轉換,輸出匯編代碼。
gcc -c source_file.c
-c,只執行到編譯,輸出目標文件。
gcc (-E/S/c/) source_file.c -o output_filename
-o, 指定輸出文件名,可以配合以上三種標簽使用。
-o 參數可以被省略。這種情況下編譯器將使用以下默認名稱輸出:
-E:預編譯結果將被輸出到標准輸出埠(通常是顯示器)
-S:生成名為source_file.s的匯編代碼
-c:生成名為source_file.o的目標文件。
無標簽情況:生成名為a.out的可執行文件。
gcc -g source_file.c
-g,生成供調試用的可執行文件,可以在gdb中運行。由於文件中包含了調試信息因此運行效率很低,且文件也大不少。
這里可以用strip命令重新將文件中debug信息刪除。這是會發現生成的文件甚至比正常編譯的輸出更小了,這是因為strip把原先正常編譯中的一些額外信息(如函數名之類)也刪除了。用法為 strip a.out
gcc -s source_file.c
-s, 直接生成與運用strip同樣效果的可執行文件(刪除了所有符號信息)。
gcc -O source_file.c
-O(大寫的字母O),編譯器對代碼進行自動優化編譯,輸出效率更高的可執行文件。
-O 後面還可以跟上數字指定優化級別,如:
gcc -O2 source_file.c
數字越大,越加優化。但是通常情況下,自動的東西都不是太聰明,太大的優化級別可能會使生成的文件產生一系列的bug。一般可選擇2;3會有一定風險。
gcc -Wall source_file.c
-W,在編譯中開啟一些額外的警告(warning)信息。-Wall,將所有的警告信息全開。
gcc source_file.c -L/path/to/lib -lxxx -I/path/to/include
-l, 指定所使用到的函數庫,本例中鏈接器會嘗試鏈接名為libxxx.a的函數庫。
-L,指定函數庫所在的文件夾,本例中鏈接器會嘗試搜索/path/to/lib文件夾。
-I, 指定頭文件所在的文件夾,本例中預編譯器會嘗試搜索/path/to/include文件夾。
Ⅶ VC++6.0編譯器中怎麼設置編譯選項為多線程
/MT
「Project Settings」
選擇「C/C++」頁面標簽,然後在「Category」下拉式清單方塊中選擇「Code Generation」。在「Use Run-Time Library」下拉式清單方塊中,可以看到用於「Release」設定的「Single-Threaded」和用於Debug設定的「Debug Single-Threaded」。將這些分別改為「Multithreaded」和「Debug Multithreaded」。
Ⅷ 請問新裝的編譯器,編譯時出現如下問題,怎麼回事需要設置或安裝什麼Makefile is older than Makefile
.0發布了。目前,GCC可以用來編譯C/C++、FORTRAN、java、OBJC、ADA等語言的程序,可根據需要選擇安裝支持的語言。GCC 3.4.0比以前版本更好地支持了C++標准。本文以在Redhat Linux上安裝GCC3.4.0為例,介紹了GCC的安裝過程。
安裝之前,系統中必須要有cc或者gcc等編譯器,並且是可用的,或者用環境變數CC指定系統上的編譯器。如果系統上沒有編譯器,不能安裝源代碼形式的GCC 3.4.0。如果是這種情況,可以在網上找一個與你系統相適應的如RPM等二進制形式的GCC軟體包來安裝使用。本文介紹的是以源代碼形式提供的GCC軟體包的安裝過程,軟體包本身和其安裝過程同樣適用於其它Linux和Unix系統。
系統上原來的GCC編譯器可能是把gcc等命令文件、庫文件、頭文件等分別存放到系統中的不同目錄下的。與此不同,現在GCC建議我們將一個版本的GCC安裝在一個單獨的目錄下。這樣做的好處是將來不需要它的時候可以方便地刪除整個目錄即可(因為GCC沒有uninstall功能);缺點是在安裝完成後要做一些設置工作才能使編譯器工作正常。在本文中我採用這個方案安裝GCC 3.4.0,並且在安裝完成後,仍然能夠使用原來低版本的GCC編譯器,即一個系統上可以同時存在並使用多個版本的GCC編譯器。
按照本文提供的步驟和設置選項,即使以前沒有安裝過GCC,也可以在系統上安裝上一個可工作的新版本的GCC編譯器。
1. 下載
在GCC網站上()或者通過網上搜索可以查找到下載資源。目前GCC的最新版本為 3.4.0。可供下載的文件一般有兩種形式:gcc-3.4.0.tar.gz和gcc-3.4.0.tar.bz2,只是壓縮格式不一樣,內容完全一致,下載其中一種即可。
2. 解壓縮
根據壓縮格式,選擇下面相應的一種方式解包(以下的「%」表示命令行提示符):
% tar xzvf gcc-3.4.0.tar.gz
或者
% bzcat gcc-3.4.0.tar.bz2 | tar xvf -
新生成的gcc-3.4.0這個目錄被稱為源目錄,用$表示它。以後在出現$的地方,應該用真實的路徑來替換它。用pwd命令可以查看當前路徑。
在$/INSTALL目錄下有詳細的GCC安裝說明,可用瀏覽器打開index.html閱讀。
3. 建立目標目錄
目標目錄(用$表示)是用來存放編譯結果的地方。GCC建議編譯後的文件不要放在源目錄${srcdir]中(雖然這樣做也可以),最好單獨存放在另外一個目錄中,而且不能是$的子目錄。
例如,可以這樣建立一個叫 gcc-build 的目標目錄(與源目錄$是同級目錄):
% mkdir gcc-build
% cd gcc-build
以下的操作主要是在目標目錄 $ 下進行。
4. 配置
配置的目的是決定將GCC編譯器安裝到什麼地方($),支持什麼語言以及指定其它一些選項等。其中,$不能與$或$目錄相同。
配置是通過執行$下的configure來完成的。其命令格式為(記得用你的真實路徑替換$):
% $/configure --prefix=$ [其它選項]
例如,如果想將GCC 3.4.0安裝到/usr/local/gcc-3.4.0目錄下,則$就表示這個路徑。
在我的機器上,我是這樣配置的:
% ../gcc-3.4.0/configure --prefix=/usr/local/gcc-3.4.0 --enable-threads=posix --disable-checking --enable--long-long --host=i386-redhat-linux --with-system-zlib --enable-languages=c,c++,java
將GCC安裝在/usr/local/gcc-3.4.0目錄下,支持C/C++和JAVA語言,其它選項參見GCC提供的幫助說明。
5. 編譯
% make
這是一個漫長的過程。在我的機器上(P4-1.6),這個過程用了50多分鍾。
6. 安裝
執行下面的命令將編譯好的庫文件等拷貝到$目錄中(根據你設定的路徑,可能需要管理員的許可權):
% make install
至此,GCC 3.4.0安裝過程就完成了。
6. 其它設置
GCC 3.4.0的所有文件,包括命令文件(如gcc、g++)、庫文件等都在$目錄下分別存放,如命令文件放在bin目錄下、庫文件在lib下、頭文件在include下等。由於命令文件和庫文件所在的目錄還沒有包含在相應的搜索路徑內,所以必須要作適當的設置之後編譯器才能順利地找到並使用它們。
6.1 gcc、g++、gcj的設置
要想使用GCC 3.4.0的gcc等命令,簡單的方法就是把它的路徑$/bin放在環境變數PATH中。我不用這種方式,而是用符號連接的方式實現,這樣做的好處是我仍然可以使用系統上原來的舊版本的GCC編譯器。
首先,查看原來的gcc所在的路徑:
% which gcc
在我的系統上,上述命令顯示:/usr/bin/gcc。因此,原來的gcc命令在/usr/bin目錄下。我們可以把GCC 3.4.0中的gcc、g++、gcj等命令在/usr/bin目錄下分別做一個符號連接:
% cd /usr/bin
% ln -s $/bin/gcc gcc34
% ln -s $/bin/g++ g++34
% ln -s $/bin/gcj gcj34
這樣,就可以分別使用gcc34、g++34、gcj34來調用GCC 3.4.0的gcc、g++、gcj完成對C、C++、JAVA程序的編譯了。同時,仍然能夠使用舊版本的GCC編譯器中的gcc、g++等命令。
6.2 庫路徑的設置
將$/lib路徑添加到環境變數LD_LIBRARY_PATH中,最好添加到系統的配置文件中,這樣就不必要每次都設置這個環境變數了。
例如,如果GCC 3.4.0安裝在/usr/local/gcc-3.4.0目錄下,在RH Linux下可以直接在命令行上執行或者在文件/etc/profile中添加下面一句:
setenv LD_LIBRARY_PATH /usr/local/gcc-3.4.0/lib:$LD_LIBRARY_PATH
7. 測試
用新的編譯命令(gcc34、g++34等)編譯你以前的C、C++程序,檢驗新安裝的GCC編譯器是否能正常工作。
8. 根據需要,可以刪除或者保留$和$目錄。
Ⅸ 如何設置NDK的編譯選項
1. 概述
首先回顧一下 Android NDK 開發中,Android.mk 和 Application.mk 各自的職責。
Android.mk,負責配置如下內容:
(1) 模塊名(LOCAL_MODULE)
(2) 需要編譯的源文件(LOCAL_SRC_FILES)
(3) 依賴的第三方庫(LOCAL_STATIC_LIBRARIES,LOCAL_SHARED_LIBRARIES)
(4) 編譯/鏈接選項(LOCAL_LDLIBS、LOCAL_CFLAGS)
Application.mk,負責配置如下內容:
(1) 目標平台的ABI類型(默認值:armeabi)(APP_ABI)
(2) Toolchains(默認值:GCC 4.8)
(3) C++標准庫類型(默認值:system)(APP_STL)
(4) release/debug模式(默認值:release)
由此我們可以看到,本文所涉及的編譯選項在Android.mk和Application.mk中均有出現,下面我們將一個個詳細介紹。
2. APP_ABI
ABI全稱是:Application binary interface,即:應用程序二進制介面,它定義了一套規則,允許編譯好的二進制目標代碼在所有兼容該ABI的操作系統和硬體平台中無需改動就能運行。(具體的定義請參考 網路 或者 維基網路 )
由上述定義可以判斷,ABI定義了規則,而具體的實現則是由編譯器、CPU、操作系統共同來完成的。不同的CPU晶元(如:ARM、Intel x86、MIPS)支持不同的ABI架構,常見的ABI類型包括:armeabi,armeabi-v7a,x86,x86_64,mips,mips64,arm64-v8a等。
這就是為什麼我們編譯出來的可以運行於Windows的二進製程序不能運行於Mac OS/Linux/Android平台了,因為CPU晶元和操作系統均不相同,支持的ABI類型也不一樣,因此無法識別對方的二進製程序。
而我們所說的「交叉編譯」的核心原理也跟這些密切相關,交叉編譯,就是使用交叉編譯工具,在一個平台上編譯生成另一個平台上的二進制可執行程序,為什麼可以做到?因為交叉編譯工具實現了另一個平台所定義的ABI規則。我們在Windows/Linux平台使用Android NDK交叉編譯工具來編譯出Android平台的庫也是這個道理。
這里給出最新 Android NDK 所支持的ABI類型及區別:
那麼,如何指定ABI類型呢?在 Application.mk 文件中添加一行即可:
APP_ABI := armeabi-v7a //只編譯armeabi-v7a版本APP_ABI := armeabi armeabi-v7a //同時編譯armeabi,armeabi-v7a版本APP_ABI := all //編譯所有版本
3. LOCAL_LDLIBS
Android NDK 除了提供了Bionic libc庫,還提供了一些其他的庫,可以在 Android.mk 文件中通過如下方式添加依賴:
LOCAL_LDLIBS := -lfoo
其中,如下幾個庫在 Android NDK 編譯時就默認鏈接了,不需要額外添加在 LOCAL_LDLIBS 中:
(1) Bionic libc庫
(2) pthread庫(-lpthread)
(3) math(-lmath)
(4) C++ support library (-lstdc++)
下面我列了一個表,給出了可以添加到「LOCAL_LDLIBS」中的不同版本的Android NDK所支持的庫:
下面是我總結的一些常用的CFLAGS編譯選項:
(1)通用的編譯選項
-O2 編譯優化選項,一般選擇O2,兼顧了優化程度與目標大小
-Wall 打開所有編譯過程中的Warning
-fPIC 編譯位置無關的代碼,一般用於編譯動態庫
-shared 編譯動態庫
-fopenmp 打開多核並行計算,
-Idir 配置頭文件搜索路徑,如果有多個-I選項,則路徑的搜索先後順序是從左到右的,即在前面的路徑會被選搜索
-nostdinc 該選項指示不要標准路徑下的搜索頭文件,而只搜索-I選項指定的路徑和當前路徑。
--sysroot=dir 用dir作為頭文件和庫文件的邏輯根目錄,例如,正常情況下,如果編譯器在/usr/include搜索頭文件,在/usr/lib下搜索庫文件,它將用dir/usr/include和dir/usr/lib替代原來的相應路徑。
-llibrary 查找名為library的庫進行鏈接
-Ldir 增加-l選項指定的庫文件的搜索路徑,即編譯器會到dir路徑下搜索-l指定的庫文件。
-nostdlib 該選項指示鏈接的時候不要使用標准路徑下的庫文件
(2) ARM平台相關的編譯選項
-marm -mthumb 二選一,指定編譯thumb指令集還是arm指令集
-march=name 指定特定的ARM架構,常用的包括:-march=armv6, -march=armv7-a
-mfpu=name 給出目標平台的浮點運算處理器類型,常用的包括:-mfpu=neon,-mfpu=vfpv3-d16
-mfloat-abi=name 給出目標平台的浮點預算ABI,支持的參數包括:「soft」, 「softfp」 and 「hard」