利用CMakeLists.txt添加库文件

利用CMakeLists.txt添加库文件

在一个 C++ 工程中,并不是所有代码都会编译成可执行文件。只有带有 main 函数的文件才会生成可执行程序。而另一些代码,我们只想把它们打包成一个东西,供其他程序调用。这个东西叫做库。

如何加入库文件

——以库文件libHelloSLAM.cpp举例

1.生成库(静态库)

//这是一个库文件
#include
using namespace std;
void printHello()
{
cout<<“Hello SLAM”<<endl;
}

这个库提供了一个 printHello 函数,调用此函数将输出一个信息。但是它没有 main函数,这意味着这个库中没有可执行文件。
我们在 CMakeLists.txt 里加一句:

add_library( hello libHelloSLAM.cpp )

这条命令告诉 cmake,我想把这个文件编译成一个叫做“hello”的库。然后使用 cmake 编译整个工程:

cd build
cmake …
make

这时,在 build 文件夹中会生成一个 libhello.a 文件,这就是我们得到的库。

2.共享库

在 Linux 中, 库文件分成静态库和共享库两种。静态库以.a 作为后缀名,共享库以.so结尾。所有库都是一些函数打包后的集合,差别在于静态库每次被调用都会生成一个副本,而共享库则只有一个副本,更省空间。如果我们想生成共享库而不是静态库,只需用:

add_library( hello_shared SHARED libHelloSLAM.cpp )

就可以编译成一个共享库。此时得到的文件是 libhello_shared.so 了。

库文件是一个压缩包,里头带有编译好的二进制函数。不过,仅有.a 或.so 库文件的话,我们并不知道它里头的函数到底是什么,调用的形式又是什么样的。

为了让别人(或者自己)使用这个库,我们需要提供一个头文件,说明这些库里都有些什么。因此,对于库的使用者,只要拿到了头文件和库文件,就可以调用这个库了。

3.调用库

libhello的头文件libHelloSLAM.h

#ifndef LIBHELLOSLAM_H_
#define LIBHELLOSLAM_H_
void printHello();
#endif

编写可执行程序

useHello.cpp

#include “libHelloSLAM.h”
int main( int argc, char** argv )
{
printHello();
return 0;
}

CMakeLists.txt调用库文件

添加一个可执行程序的生成命令,链接到刚才我们使用的库上:

add_executable( useHello useHello.cpp )
target_link_libraries( useHello hello_shared )

通过这两句话, useHello 程序就能顺利使用 hello_shared 库中的代码了。
这个小例子演示了如何生成并调用一个库。
请注意对于他人提供的库,我们也可用同样的方式对它们进行调用,整合到自己的程序中。

4.总结

#添加库add_library( 库名 库的类型 库文件cpp文件 )
add_library( hello_shared SHARED libHelloSLAM.cpp )
#可执行文件
add_executable( useHello useHello.cpp )
#可执行文件链接库target_link_libraries( 可执行文件名 库名 )
target_link_libraries( useHello hello_shared )

参考:《视觉SLAM十四讲》

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值