1. 程式人生 > >g++/gcc選項

g++/gcc選項

新增執行時共享庫目錄

執行使用共享庫的程式需要載入共享庫(不同於G++ 編譯時指定的連結庫),新增共享庫的步驟:

  1. 修改檔案 /etc/ld.so.conf 新增共享庫目錄
  2. 執行 ldconfig 同步更新一下

如:

1gedit /etc/ld.so.conf
2#新增 /root/dreamlove/lib
3ldconfig

新增include,lib的搜尋路徑

對所有使用者有效修改/etc/profile 
對個人有效則修改~/.bashrc 
#在PATH中找到可執行檔案程式的路徑。 export PATH =$PATH:$HOME/bin 
#gcc找到標頭檔案的路徑 C_INCLUDE_PATH=/usr/include/libxml2:/MyLib export C_INCLUDE_PATH 

#g++找到標頭檔案的路徑 CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/include/libxml2:/MyLib export CPLUS_INCLUDE_PATH 
#找到動態連結庫的路徑 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/MyLib export LD_LIBRARY_PATH 

#找到靜態庫的路徑 LIBRARY_PATH=$LIBRARY_PATH:/MyLib export LIBRARY_PATH
使用source,載入這些定義使其立即生效;或者重啟

g++編譯時的流程

  • 呼叫預編器CPP進行預處理,生成.i檔案
  • 呼叫編譯器egcs進行彙編,生成.s檔案
  • 調用匯編器as生成目標,.o檔案
  • 呼叫聯結器ld進行連結,生成可執行文

g++使用注意項

用於連結庫的 -l 選項必須放在 g++ 選項後面,如:

1g++ -o ./tmpExec/pthread pthread.cpp -lpthread
2#這個是正確的
3g++ -lpthread -o ./tmpExec/pthread pthead.cpp #出錯

應該注意的選項

MM選項與M選項

生成檔案的依賴關係,比如:g++ -MM testMM.cpp;將依賴關係輸出到螢幕上,此時應該對其進行重定向;-MM是不會進行語法檢查的。只是對原始檔的include關係進行分析得到依賴關係;如

1#include <unistd.h>
2#include "geteth0Ip.h"
3
4int mian(){
5return;
6}
7//這個漏洞百出的原始檔仍然可以使用-MM獲得它的依賴關係
與 makefile 的使用: 
1$(dfiles):%.d:%.cpp
2@g++   -MM  $< | sed  '$ a\\tg++ -c -o $(ObjsDir)/$(patsubst %.d,%.o,[email protected]) $<' >$(DsDir)/[email protected]
3# 使得每一個 .d 檔案都包含著一個完整的規則

常用選項

g++ -fsigned-char -o test.exe hello.cpp
選項引數描述例子
-x'c|c++|..|'不再根據原始檔的字尾名來判斷編寫原始檔的語言,即指定原始檔的語言g++ -x 'c++' test.txt
-E只執行編譯的第一個流程:預處理,不會生成檔案,可以重定向到檔案g++ -E test.cpp
-S執行編譯的前兩個流程生成彙編程式碼g++ -S test.cpp
-c執行前三個流程生成目標檔案g++ -c test.cpp
-o目標檔名重新命名目標檔名g++ -S -o test.asm test.cpp
-pipe使用管道來儲存檔案,下一個流程從/tmp/資料夾中讀取上一個流程的結果,使用pipe後,上一個流程將結果儲存在記憶體中,下一個流程直接從記憶體中讀取上一個流程的結果g++ -pipe -o test.exe test.cpp
-ansi關閉gun的特性,使程式碼全面符合ansi要求,從而具有高移植性g++ -ansi -o test.ext test.cpp
-fno-asm-ansi的一部分:將asm,inline,typeof視為普通識別符號g++ -fno-asm -o test.exe test.cpp
-fno-strict-prototype不再支援
-fthis-is-variable不再支援
-fcond-mismatch允許條件表示式的第2,3個引數的型別不一致,現已預設開啟預設開啟
-funsigned-char
-fno-signed-char
-fsigned-char
-fno-unsigned-char
對char型別進行設定,決定將char型別設定成unsigned char(前兩個引數)或者signed char(後兩個引數)
-imacros包含巨集的檔案相當於include,可以直接使用引數檔案裡的巨集g++ -imacros hello.mac hello.cpp
-Dmacro
-Dmacro=defn
macro為引數相當於#define macrog++ -DUNICODE -o test.exe hello.cpp
-Umacromacro為引數相當於#undef macro,不能取消在文字檔案中定義的巨集!g++ -UUNICODE -o test.exe hello.cpp
-undef取消對任何非標準巨集的定義g++ -undef -o test.exe hello.cpp
-Idirdir就是引數一般查詢標頭檔案順序:-I指定的目錄->當前目錄->環境變數定義的目錄g++ -I'C:/Users/Dream/Desktop/' -o test.exe hello.cpp
-nostdinc使編譯器不在系統預設的標頭檔案目錄裡面找標頭檔案g++ -nostdinc -o test.exe -c hello.cpp
-C在預處理的時候,不刪除註釋資訊,一般和-E使用,有時候分析程式,用這個很方便的g++ -E -C -o test.h hello.cpp
-M生成檔案關聯的資訊。包含目標檔案所依賴的所有原始檔,這個在製作makefile應該會很有用g++ -M -o test1.h hello.cpp
-MM同-M,不過忽略#include<file>>造成的依賴關係g++ -MM -o test.h hello.cpp
-Waoptions傳遞引數給as(彙編器)
-Wloptions傳遞引數為ld(聯結器)
-llibslib就是引數指定編譯的時候所使用的庫,liblibs.so(如果static選項設定的話就是liblibs.a)g++ -lprint hello.cpp(連結 libprint.so)
-Ldirdir就是引數指定查詢連結庫時的目錄g++ -L'C:/Users/Dream/Desktop/' -lprint hello.cpp
-Onn為引數,表示優化等級取:0,1,2,3進行相應程度的優化g++ -O3 -o test3.asm -S hello.cpp
-g
-ggdb
-gstabs
-gstabe+
生成除錯資訊,可以被gdb使用
儘可能地生成gdb格式的除錯資訊
生成stabs格式的除錯資訊
同時shengc stabs,gdb格式的資訊
g++ -g hello.cpp

相關推薦

g++/gcc選項

新增執行時共享庫目錄執行使用共享庫的程式需要載入共享庫(不同於G++ 編譯時指定的連結庫),新增共享庫的步驟:修改檔案 /etc/ld.so.conf 新增共享庫目錄執行 ldconfig 同步更新一下如:1gedit /etc/ld.so.conf2#新增 /root/dr

GCC & G++編譯選項

gcc & g++現在是gnu中最主要和最流行的c & c++編譯器 。 g++是c++的命令,以.cpp為主,對於c語言字尾名一般為.c。這時候命令換做gcc即可。其實是無關緊要的。 其實編譯器是根據gcc還是g++來確定是按照C標準還是C++標準編譯連結。

[Linux][2015-03-17] gcc/g++ 編譯選項

GCC的幾個常用選項                                gcc常用的編譯選項對程式碼的影響 建立時間:2001-12-21 文章屬性:原創 文章來源:http://xfocus.org/ 文章提交:alert7 (sztcww_at_sina.com) 測試環境 redhat 6

g++/gcc 常見選項。(muduo 編譯小程式舉例)

-g 加入除錯? -o 輸出 -I 加入尋找標頭檔案的路徑。 例如: #include <muduo/net/TimerId.h> /* 如果/usr/include這些系統庫路徑沒有muduo庫的話,我們編譯需要加上“-I muduo庫

gccg++編譯選項詳解

gcc 提供了大量的警告選項,對程式碼中可能存在的問題提出警 告,通常可以使用-Wall來開啟以下警告:            -Waddress -Warray-bounds (only with -O2) -Wc++0x-compat            -Wchar-subscripts -Wi

解決安裝yum -y install make gcc g++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel expat-devel後無法連接mysql

pan isa linu mage exp aio memory compress bsp 查看mysqld.log 日誌: mysql日誌 171210 19:38:22 [Note] Plugin ‘FEDERATED‘ is disabled. 1712

【親測】<g++/gcc>CentOS下g++: command not found問題的解決(c++環境安裝)

fin define time version csdn cannot result clas 代碼 CentOS下g++: command not found問題的解決 2017年02月27日 18:09:06 閱讀數:5174 標簽: centos

關於cmake 指定g++/gcc 編譯器的問題

CMake是一個開源的跨平臺工具系列,旨在構建,測試和打包軟體。 但是,在使用cmake的時候我們也會經常遇到一些不明白的問題,下面就是使用設定指定的g++/gcc編譯器的一點經驗。 之前在網上搜索如何設定指定編譯器,發現網上的很多教程並沒有說清楚,所以做下簡單的記錄  

gcc選項引數詳解

1.gcc包含的c/c++編譯器 gcc,cc,c++,g++,gcc和cc是一樣的,c++和g++是一樣的。一般c程式就用gcc編譯,c++程式就用g++編譯。 2.gcc的基本用法 gcc test.c這樣將編譯出一個名為a.out的程式 gcc test

Failed to fetch http://mirrors.tuna.tsinghua.edu.cn/ubuntu/pool/main/g/gcc-5/g++-5_5.4.0-6ubuntu1~16

今天在ubutun中在安裝redis過程中,安裝gcc時遇到了Failed to fetch http://mirrors.tuna.tsinghua.edu.cn/ubuntu/pool/main/g/gcc-5/g++-5_5.4.0-6ubuntu1~16。 後在/etc/res

GCC選項_-Wl,-soname

http://blog.csdn.net/gohome520/article/details/7259450 -Wl選項告訴編譯器將後面的引數傳遞給連結器。 -soname則指定了動態庫的soname(簡單共享名,Short for shared object nam

poj上 G++ GCC C++編譯器的區別?

Linux 中最重要的軟體開發工具是 GCC。GCC 是 GNU 的 C 和 C++ 編譯器。實際上,GCC 能夠編譯三種語言:C、C++ 和 Object C(C 語言的一種面向物件擴充套件)。利用 gcc 命令可同時編譯並連線 C 和 C++ 源程式。 GCC 可同時用

arm-linux-androideabi-gcc 選項

[email protected]:/home/zhangbin/android/android-ndk-r9/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin# ./arm-linux-androideabi-gcc --hel

g++/gcc編譯流程

gcc & g++現在是gnu中最主要和最流行的c & c++編譯器 。 g++是c++的命令,以.cpp為主,對於c語言字尾名一般為.c。 這時候命令換做gcc即可。 本質上都是gnu編譯器集合中的倆個部分 其實編譯器是根據gcc還是g

Makefile中的-Wall -O2 -Os -g選項介紹

-Wall:選項可以打印出編譯時所有的錯誤或者警告資訊。這個選項很容易被遺忘,編譯的時候,沒有錯誤或者警告提示,以為自己的程式很完美,其實,裡面有可能隱藏著許多陷阱。變數沒有初始化,型別不匹配,或者型

GCC選項-Xlinker和-Wl區別

轉自:http://www.cnblogs.com/rickyk/p/4186902.html 備忘:在一次使用GCC的過程中發現了原來傳遞給連結器ld可以同時使用Xlinker和Wl兩種命令,這兩個命令都可以正確傳遞給ld作為使用,現在總結下兩者的區別。 Xlin

除了vim, 還有哪些常用的牛逼的編輯器。 自行查詢資料, 調研除了gcc, 還有哪些常用的牛逼的編譯器,為什麼除錯的時候需要編譯選項中新增 -g在Linux下實現進度條程式

除了vim, 還有哪些常用的牛逼的編輯器, 並能夠橫向對比編輯器之間的區別和優缺點。 首先先有一個概念IDE(整合開發環境),厲害的有vs等等。vim以及Emacs就向著這個方向發展。為了實現其強大功能。vim有了多模式編輯有(normal,insert,vis

除了vim, 還有哪些常用的牛逼的編輯器,除了gcc, 還有哪些常用的牛逼的編譯器,為什麼除錯的時候需要編譯選項中新增 -g,調研readelf命令,Linux下實現進度條程式.

除了vim, 還有哪些常用的牛逼的編輯器 Brackets Brackets也是一款為Linux開發者設計的開原始碼編輯器,使用Brackets寫程式碼,你不會被任何事情所打斷。比如在寫HTML程式碼時,即便你沒有儲存程式碼也可以及時預覽你的Web頁面效果。你也可以使用T

【轉】gcc/g++常用編譯選項和gdb常用除錯命令

  gcc/g++編譯器是我們寫編譯C/C++程式時離不開的編譯工具,而gdb又是除錯C/C++程式的利器,這一篇文章我們記錄一下它們的慣常用法。 gcc/g++常用編譯選項 選項 作

linux gcc g++編譯命令選項

編譯:  [[email protected] code]# g++-o test.o d.cpp out.cpp [[email protected] code]# ./test.o1231 [[email protected] code]#  編譯成靜態庫  [[email&