CPP----linux用g++,cmake编译链接源码,静态库与共享库

在linux上进行cpp的代码的编译

你好! 下文将详细展示在linux上对C++代码的编译与链接过程。如果你想学习如何使用g++或cmake对c++代码进行编译与链接, 可以仔细阅读这篇文章,了解一下cmake的基本语法知识。

g++编译器使用

g++安装

sudo apt-get install g++

g++编译

我们用g++编译器将源代码编译成一个可执行文件,使用如下命令:

g++ xxx.cpp

g++运行

该命令执行完后,会在同级目录下生成a.out文件,在终端执行以下命令就可以运行此程序。

bash a.out

cmake编译器使用

任何c++程序都可以用g++进行编译,但当程序规模越来越大时,一个工程可能有许多文件夹和源文件,其中一部分要编译成可执行文件,另一部分编译成库文件,曾经makefile自动编译的方式曾经也被使用,但cmake相对而言可以更加的方便管理源代码。
在一个cmake工程中,我们会用cmake命令生成一个makefile文件,然后用make命令根据这个makefile文件编译整个工程。
在源代码工程下新建一个CMakeLists.txt文件,如果需要编译库文件则添加add_library(hello libHello.cpp),编译后会生成libHello.a文件:

cmake_minimum_required(VERSION 2.8)
project(hello)
add_executable(hello hello.cpp)
add_library(hello libHello.cpp)

终端执行命令:

cmake .
make

此时便会对程序的主文件进行输出。
由于在编译过程中会生成很多中间文件,因此考虑将中间文件都放到build文件夹中,在编译成功后将这个中间文件删除即可:

mkdir build
cd build
cmake ..
make

静态库与共享库

静态库以.a作为后缀名,共享库以.so结尾,所有库都是一些函数打包后的集合,差别在于静态库每次调用都会生成一个副本,而共享库则只有一个副本,更省空间,如果想生成共享库而不是静态库,只需使用以下语句:add_library(hello_shared SHARED libHello.cpp),此时得到的文件就是libhello_shared.so。库文件是一个压缩包,里面有编译好的二进制函数,为了让别人调用这个库,我们需要提供一个头文件,说明这些库里面都有些什么,因此对于库的使用者,只要拿到了头文件和库文件,就可以调用这个库。

头文件libShare.h

#ifndef LIBHELLO_H_
#define LIBHELLO_H_
void printShare();
#endif

main()

#include "libShare.h"
int main(int argc, char**argv){
    printShare();
    return 0;
}

链接到库 CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(hello)
add_executable(hello hello.cpp)
add_library(static libstatic.cpp)
add_library(share SHARED libShare.cpp)
target_link_libraries(hello static share)

总结

1.程序代码由头文件和源文件组成
2.带main函数的源文件编译成可执行文件,其他的编译成库文件
3.如果可执行程序想调用库文件中的函数,则它需要参考该库提供的头文件,以明白调用的格式,同时,要把可执行程序链接到库文件上

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值