Linux下g++基本的编译

来源:互联网 发布:unity3d安装步骤 编辑:程序博客网 时间:2024/06/15 14:19

gcc简介(对C/C++编译的控制):

    -预处理(Preprocessing),-编译(Compilation), -汇编(Assembly), -链接(Linking)

1、基本的cpp文件编译及链接指令

// main.cpp#include <iostream>using namespace std;int main(int argc, char *argv[]){    cout<<"this is a g++ test"<<endl;    return 0;}

g++ main.cpp

生成的文件为以默认名字生成的输出文件a.out, ./a.out 执行,可打印出:this is a g++ test

指定生成的文件名称: -o file(将文件编译为filefile可以是预处理文件/汇编文件/目标文件或者最终的可执行文件

g++ main.cpp -o main

生成main,./main 执行,结果与上述一样


只编译不链接:-c (生成.o的二进制文件)

rm main

g++ -c main.cpp

生成main.o文件,

再执行g++ main -o main

生成main可执行文件,./main, 执行结果相同


预编译:-E (把所有的关文件,宏等拼接至一个文件内)

rm main main.o

g++ -E main.cpp > main.e

main.e文件内即可预编译的文件


只编译不汇编:-S

rm main.e

g++ -S main.cpp

main.s文件内即可编译后的汇编代码

带调试的可执行文件:-g

rm main.s

g++ -g main.cpp -o main_d


2、多文件编译

目录结构

src/

    person/ Person.h,  person/Person.cpp

    test/ main.cpp

文件内容如下
// main.cpp#include "Person.h"#include <iostream>using namespace std;int main(int argc, char *argv[]){        Person person;        cout<<"test main"<<endl;        return 0;}


// Person.hclass Person{public:     Person();};

// Person.cpp#include "Person.h"#include <iostream>Person::Person(){        std::cout<<"MultiFile compilation"<<std::endl;}

test目录下编译

g++ main.cpp ./person/Person.cpp -I../person -o main

执行:

./main


3、动态链接库

指令 :g++ cppfiles -fpic -shared -o libname.so

上面的命令行中-shared表明产生共享库,而-fPIC则表明使用地址无关代码。PIC:Position Independent Code.

person目录下编译

g++ Person.cpp -fpic -shared -o libPerson.so

test目录下编译

g++ main.cpp -o main -I../person -L../person -lPerson

-L表示链接目标的文件路径,-lPerson为链接库的名称

执行

首先设置环境

export LD_LIBRARY_PATH=../person

./main

输出内容:

MultiFile compilation
test main












阅读全文
0 0
原创粉丝点击