程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 詳解 linux c++的編譯器g++的根本運用

詳解 linux c++的編譯器g++的根本運用

編輯:關於C++

詳解 linux c++的編譯器g++的根本運用。本站提示廣大學習愛好者:(詳解 linux c++的編譯器g++的根本運用)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解 linux c++的編譯器g++的根本運用正文


linux c++的編譯器g++根本運用

g++是 linux下c++的編譯器,在執行編譯任務的時分,總共需求4步

1.預處置,生成.i的文件
2.將預處置後的文件不轉換成匯編言語,生成文件.s
3.有匯編變為目的代碼(機器代碼)生成.o的文件
4.銜接目的代碼,生成可執行順序

g++ 編譯c++常常運用的參數:

-c

只編譯,不銜接。例如: g++ -c helloworld.cpp

只生成helloworld.o不銜接

-o

指定輸入文件名。例如:g++ -c helloworld.cpp -o abc.o
默許是生成helloworld.o,用-o abc.o當前,就生成的是abc.o

-I

附加一個包函頭文件的途徑。例如:g++ helloworld.cpp -I"/usr/helloworld/include"

-l

小的L, 附一個庫,例如要運用libabc.so 就g++ helloworld.cpp -labc

-L

添加一個庫的途徑,例如 g++ hello.cpp -L"/usr/hello/lib" -labc

-shared

生成靜態庫文件,例如: g++ -shared hellp.cpp -o libhello.so

   調用靜態庫的時分有幾個問題會常常碰到,有時,明明曾經將庫的頭文件所在目錄經過include出去了,庫所在文件經過 “-L”參數引導,並指定了“-l”的庫名,但經過ldd命令觀察時,就是死活找不到你指定鏈接的so文件。其實編譯鏈接上了共享庫不代表執行時可以找到。所以“-L”什麼的對執行沒有用,你需求指明共享庫的途徑。辦法有三個:

   a.修正 LD_LIBRARY_PATH,指明共享庫的途徑。LD_LIBRARY_PATH:這個環境變量指示靜態銜接器可以裝載靜態庫的途徑。在終端下運用如下命令:

[root@localhost sharelib]# export LD_LIBRARY_PATH = .
[root@localhost sharelib]# export LD_LIBRARY_PATH = your lib dir export

  b.經過/etc/ld.so.conf文件來指定靜態庫的目錄。然後運轉ldconfig命令更新搜索共享庫的途徑。通常這個做法就可以處理庫無法鏈接的問題並且與日俱增。

  c.或許把庫文件拷貝到/lib下,然後ldconfig就ok了。這個辦法有的取巧,且毀壞原庫文件的純真性,不應是首選辦法。 

   修正/etc/ld.so.conf文件,然後調用 /sbin/ldconfig需求有root權限,假如沒有root權限,那麼只能采用輸入LD_LIBRARY_PATH的辦法了。

linux下文件的類型是不依賴於其後綴名的,但普通來講:

.o,是目的文件,相當於windows中的.obj文件
.so 為共享庫,是shared object,用於靜態銜接的,和dll差不多
.a為靜態庫,是好多個.o合在一同,用於靜態銜接
.la為libtool自動生成的一些共享庫,次要記載了一些配相信息。

感激閱讀,希望能協助到大家,謝謝大家對本站的支持!

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