Linux下g++基本的编译

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.h
class 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












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值