Ubuntu環境下使用g 編譯cpp檔案

2021-07-25 06:02:11 字數 1365 閱讀 5867

第一次用g++編譯cpp檔案的時候報了undefined reference的錯誤,自定義類中的函式全部都無法找到,查詢資料後發現呼叫的類是需要鏈結的,本文以乙個小例子描述編譯的過程。其中class2類呼叫了class1類的成員函式,依賴於class1類,而test檔案呼叫了class2類的成員函式,依賴於class1類。

#ifndef _class1_h

#define _class1_h

class class1

;#endif

#include

#include "class1.h"

using

namespace

std;

int class1::f(int i)

#ifndef _class2_h

#define _class2_h

#include "class1.h"

class class2

;#endif

#include

#include "class2.h"

using

namespace

std;

int class2::double_f(int i)

#include

#include "class2.h"

using

namespace

std;

int main()

先把類class1和類class2以及test檔案編譯成.o格式的檔案

g++ -c class1.cpp

g++ -c class2.cpp

g++ -c test.cpp

由於class1和class2是被依賴的,需要打包成靜態庫檔案(.a格式)用於鏈結

ar -rc class1.a class1.o

ar -rc class2.a class2.o

最後一步就是將test.o鏈結成可執行檔案

g++ -o test test.o class2.a class1.a
執行後得到可執行檔案test,使用./test指令就可以執行。這裡注意鏈結時靜態鏈結庫的順序,必要保證前面的依賴後面的的順序,如這裡test依賴class2,class2依賴class1,則鏈結時test需要寫在calss2前,class2需要寫在class1,前,否則就會有undefined reference的錯誤。

Linux 環境下使用g 編譯C

下面是乙個儲存在檔案 helloworld.cpp 中乙個簡單的 c 程式的 helloworld.cpp include int main int argc,char argv 程式使用定義在標頭檔案 iostream 中的 cout,向標準輸出寫入乙個簡單的字串。該 可用以下命令編譯為可執行檔案...

Linux環境使用g 編譯C

以下述c 的編譯為例 helloworld.cpp include intmain int argc,char ar 該 可用以下命令編譯 g helloworld.cpp 編譯器 g 通過檢查命令列中指定的檔案的字尾名,可識別其為 c 源 檔案。編譯器預設的動作 編譯源 檔案生成物件檔案 obje...

Ubuntu下安裝C 交叉編譯環境

1.作業系統 ubuntu 2.安裝交叉編譯器 用c 寫 要用c 的交叉編譯器編譯,使用apt安裝arm linux gnueabihf g 輸入命令 sudo apt install arm linux gnueabihf g 3.修改makefile檔案 將原來編譯c語言原始檔的arm linu...