美文网首页
使用g++创建动态库和静态库及其相关探索

使用g++创建动态库和静态库及其相关探索

作者: yichen_china | 来源:发表于2022-11-24 09:33 被阅读0次

    使用g++创建动态库和静态库及其相关探索
    目录
    使用g++创建动态库和静态库及其相关探索
    0.前期准备
    1.静态库创建及链接
    2.动态库创建及链接
    3.相关问题
    移动动态库后仍不能运行
    0.前期准备
    首先我们建立头文件 “hello.h”

    内容如图:


    image.png

    随后我们建立源文件 “hello.cpp”


    image.png

    内容如图:

    最后我们建立源文件 “main.cpp”

    内容如图:


    image.png

    我们使用 g++ -c 编译出.o文件。
    无论是动态库还是静态库,都得由.o文件创建,所以我们先编译出.o文件。

    结果如图:可以看到有 hello.o 文件

    1.静态库创建及链接
    使用 ar crv 命令创立静态库。
    结果如图:建立出了静态库文件 libmyhello.a ,静态库文件后缀为.a 。
    使用 g++ 命令链接静态库
    g++ main.cpp libmyhello.a -o main


    image.png

    结果如图:生成了可执行文件main,且可以正常运行。
    删除静态库libmyhello.a,程序仍能运行,说明链接成功。
    结果如图:


    image.png

    2.动态库创建及链接
    使用 -shared -fPCI 命令创立动态库。
    结果如图:建立出了动态库文件 libtest.so ,动态库文件后缀为.so 。


    image.png

    使用 g++ 命令链接动态库
    g++ main.cpp -L. -ltest -o main
    /*
    -L代表so库目录,“-L.” 是当前目录, -I代表引用文件目录。main即为可执行文件
    */

    结果如图: 生成可执行文件main


    image.png

    运行程序
    直接运行会报错:缺少文件。我们将动态库移动到/usr/lib 中即可
    mv libtest.so /usr/lib

    随后即可正常运行(如果移动后仍不能运行,请看下文)


    image.png

    3.相关问题
    移动动态库后仍不能运行
    1.首先进入 /etc/ld.so.conf 文件

    vim /etc/ld.so.conf

    2.修改内容为如下

    include /etc/ld.so.conf.d/*.conf

    3.进入目录,创建任意*.conf文件

    cd /etc/ld.so.conf.d
    vim mylib.conf

    4.在其中添加so的路径即可

    /usr/lib

    5.执行命令使其生效

    sudo ldconfig

    随后程序即可正常运行

    相关文章

      网友评论

          本文标题:使用g++创建动态库和静态库及其相关探索

          本文链接:https://www.haomeiwen.com/subject/sqntfdtx.html