程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> GCC命令行參數的問題(靜態庫,32/64bit,pthread)

GCC命令行參數的問題(靜態庫,32/64bit,pthread)

編輯:C++入門知識

由於對GCC的參數一知半解,害我今天早上浪費了一個多小時。“以此文祭奠失去的時間”

1、生成靜態鏈接庫:
分兩步
g++ -c aaa.cpp
ar -rsv libaaa.a aaa.o
gcc默認要求庫文件名必須是lib[名稱].a的形式,動態鏈接庫類似是.so

2、怎麼用這個libaaa.a,有兩種辦法
g++ main.c -L"PATH_TO_AAA" -laaa
或者
g++ main.c libaaa.a
前者在使用靜態庫時候比較常見,最重要的是,-L和-l參數必須在源文件之後指定!我今天不知道這個問題,瞎試了半天。我猜這種規定有助於對不同的源文件指定不同的庫,比較清晰。

3、64位系統加參數-m64
怎們看自己的系統是不是64位呢?
$su - root
#file /sbin/init
/sbin/init: ELF <b>;32-bit</b>; LSB executable, Intel 80386......
按字面上寫的就對了

4、Linux的線程庫
POSIX標准線程庫pthread,如果工程裡用到多線程庫就需要注意gcc的參數,有些時候-lpthread會失敗,比如RakNet,這時必須用-pthread。
-pthread和-lpthread的區別在網上可以搜到

$ gcc -v -c x.c 
... 
/usr/lib/gcc/i486-linux-gnu/4.2.4/cc1 -quiet -v x.c -quiet -dumpbase x.c

$ gcc -v -pthread -c x.c 
... 
/usr/lib/gcc/i486-linux-gnu/4.2.4/cc1 -quiet -v -D_REENTRANT

可見編譯選項中指定 -pthread 會附加一個宏定義-D_REENTRANT,該宏會導致 libc 頭文件選擇那些thread-safe的實現;鏈接選項中指定 -pthread 則同 -lpthread 一樣,只表示鏈接 POSIX thread 庫。由於 libc 用於適應 thread-safe 的宏定義可能變化,因此在編譯和鏈接時都使用 -pthread 選項而不是傳統的 -lpthread 能夠保持向後兼容,並提高命令行的一致性。


摘自 善良的獸人

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved