C++编写库文件以及调用

我们在日常编码中,可能会出现这样一种情况:我们要将我们写好的函数或者类提供给别人,但是我们只想给他提供接口而不想让他了解到函数的具体细节。这时我们可以将我们的函数封装成库然后和头文件一起提供给他,这样他按照接口的说明文档就可以使用了,但是无法了解到内部是如何实现的。

编写库文件

有一个文件夹名为cppSpace,里面有一个helloWorld.h和helloWorld.cpp文件,helloWorld.h内容如下:

#ifndef LIBHELLOWORLD_H_
#define LIBHELLOWORLD_H_

void printHello();  

#endif

helloWorld.cpp内容如下:

#include<iostream>

using namespace std;

void printHello()
{
    
    
        cout<<"Hello world!"<<endl;
}

现在我们在cpp文件夹下新建一个名为CMakeLists.txt的文件,并在里面添加如下内容:

# add_library(程序名 源代码文件)
add_library( hello helloWorld.cpp )
add_library( hello_shared SHARED HelloWorld.cpp )

add_library()的意思就是将helloWorld.cpp封装成静态库,加上SHARED就是生成共享库。
现在我们在cpp文件夹下新建一个文件夹名为build,然后切换到build文件夹下,使用cmake对其进行编译。在终端中输入:

cd build
cmake ..
make

执行完后,build目录下就会出现libhello.a(静态库)和libhello_shared.so(共享库)。
cppSpace文件夹的树目录如下图所示:
在这里插入图片描述

库的调用

现在我们已经有了helloWorld.h头文件和libhell.a库,我们将这两个文件提供给别人,那么别人该如何使用呢?
我们新建一个名为cpp的文件夹,将helloWorld.h和libhell.a拷贝到cpp文件夹下,并且在cpp文件夹下新建useHello.cpp文件,添加以下内容:

#include "helloWorld.h"

int main()
{
    
    
        printHello();
        return 0;
}

可以看到,在useHello.cpp中我们调用了printHello()函数,要想该函数被成功调用,我们还需要在编译时链接到库文件libhello.a。
创建CMakeLists.txt文件,加入以下内容:

link_directories(/home/user/cpp)  # 这个路径就是存放.a文件的路径
add_executable( useHello useHello.cpp )
target_link_libraries( useHello libhello.a )  # 建立与库文件的链接

然后再cpp文件夹下新建build文件夹,进入build文件夹,执行下面指令

cmake ..
make 
./useHello

终端成功输出:

Hello world!

cpp文件夹的树目录如下图所示:
在这里插入图片描述

参考链接:https://mp.weixin.qq.com/s/QgT0L49R2VkmCkWxFxnnvQ

猜你喜欢

转载自blog.csdn.net/qq_41596730/article/details/127719762