makefile 编译动态链接库使用(.so库文件)

这篇具有很好参考价值的文章主要介绍了makefile 编译动态链接库使用(.so库文件)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

makefile 编译动态链接库使用(.so库文件)

动态链接库:不会把代码编译到二进制文件中,而是在运行时才去加载, 好处是程序可以和库文件分离,可以分别发版,然后库文件可以被多处共享

动态链接库

动态:动态加载

链接:二进制文件和库文件分离。

库 库文件 .so

新建一个文件TestSo

//
// Created by qiufh on 2024-01-21.
//

#ifndef UNTITLED3_TESTSO_H
#define UNTITLED3_TESTSO_H


class TestSo {
public:
    void fun1();

    virtual void fun2();

    virtual void fun3() = 0;
};
//
// Created by qiufh on 2024-01-21.
//

#include "TestSo.h"
#include <iostream>
void TestSo::fun1() {
    printf("fun1\n");
}
void TestSo::fun2() {
    printf("fun2\n");
}
void TestSo::fun3() {
    printf("fun3\n");
}

makefile 编译动态链接库使用(.so库文件),make,makeflie,cmake笔记,linux,c++

编译一下

makefile 编译动态链接库使用(.so库文件),make,makeflie,cmake笔记,linux,c++

main.cpp

#include <iostream>
#include "TestSo.h"
class Test:public TestSo{
public:
    void fun2() {
        printf("fun2\n");
    }
    void fun3() {
        printf("fun3\n");
    }
};
int main() {
    Test test;
    test.fun1();
    test.fun2();
    test.fun3();
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

写好之后我们放到linux系统中验证

makefile 编译动态链接库使用(.so库文件),make,makeflie,cmake笔记,linux,c++

编译成动态库.so文件

makefile 编译动态链接库使用(.so库文件),make,makeflie,cmake笔记,linux,c++

新建一个test.cpp测试文件

#include <iostream>
#include "SoTest.h"
class Test:public SoTest{
public:
    void fun2() {
        printf("fun2\n");
    }
    void fun3() {
        printf("fun3\n");
    }
};
int main() {
    Test test;
    test.fun1();
    test.fun2();
    test.fun3();
    return 0;
}

链接动态库文件,执行测试一下,没问题,输出打印信息。

makefile 编译动态链接库使用(.so库文件),make,makeflie,cmake笔记,linux,c++

将cpp文件与so文件链接并生成执行文件:先将so文件拷贝至/lib文件夹内:

makefile 编译动态链接库使用(.so库文件),make,makeflie,cmake笔记,linux,c++

否则将会出现下面的错误:

makefile 编译动态链接库使用(.so库文件),make,makeflie,cmake笔记,linux,c++

把这个动态库的编译流程写入makefile文件中

makefile 编译动态链接库使用(.so库文件),make,makeflie,cmake笔记,linux,c++

先clean一下

makefile 编译动态链接库使用(.so库文件),make,makeflie,cmake笔记,linux,c++

再make一下

makefile 编译动态链接库使用(.so库文件),make,makeflie,cmake笔记,linux,c++

然后要把so文件拷贝到/lib目录下,否则会报错

makefile 编译动态链接库使用(.so库文件),make,makeflie,cmake笔记,linux,c++

成功

makefile 编译动态链接库使用(.so库文件),make,makeflie,cmake笔记,linux,c++文章来源地址https://www.toymoban.com/news/detail-819005.html

到了这里,关于makefile 编译动态链接库使用(.so库文件)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ONNX:C++通过onnxruntime使用.onnx模型进行前向计算【下载的onnxruntime是编译好的库文件,可直接使用】

    微软联合Facebook等在2017年搞了个深度学习以及机器学习模型的格式标准–ONNX,旨在将所有模型格式统一为一致,更方便地实现模型部署。现在大多数的深度学习框架都支持ONNX模型转出并提供相应的导出接口。 ONNXRuntime(Open Neural Network Exchange)是微软推出的一款针对ONNX模型格式

    2024年02月15日
    浏览(36)
  • 通过 CMake 制作库文件 静态库 和 动态库

    CMake Calc 项目 在这里有 add.c,div.c,mult.c,sub.c,main.c,head.h 二、生成静态库  CMakeLists.txt  CMakeLists.txt   (也可以写成这样) 执行命令:  三、生成动态库 CMakeLists.txt    CMakeLists.txt   (也可以写成这样) 

    2024年01月16日
    浏览(43)
  • 【ARM 嵌入式 编译系列 3.4 -- 查看所依赖库文件的路径 详细介绍】

    请阅读 【嵌入式开发学习必备专栏 之 ARM GCC 编译专栏】 在自己构建的 Makefle系统中对 cortex-m33 代码编译时,在链接阶段总是报出下面问题 从报错信息可以看出来是没有找到对应 lib 文件,所以应该是链接脚本中没有设置正确库文件的路径,但是又不知道需要使用哪些库,及

    2024年02月02日
    浏览(69)
  • 浅谈Kernel32.dll(Windows平台下必有的动态库文件)

            今天听了前辈的黑客攻击的知识分享,里面比较基础的元素就是Kernel32.dll,我对它感兴趣好久了,今天搜集一些资料,有关Kernel32的。   目录 ​编辑 一、Kernel32介绍 二、Kernel32内存管理 三、引起Kernel32出错的主要元凶 四、解决方案 五、总结         Kernel32.dll是

    2024年02月04日
    浏览(28)
  • 【ARM 嵌入式 编译系列 3.7 -- newlib 库文件与存根函数 stubs 详细介绍】

    请阅读 【嵌入式开发学习必备专栏 之 ARM GCC 编译专栏】 newlib 是为嵌入式系统设计的一种 C 标准库实现,它特别适用于那些没有传统操作系统支持的系统。由于嵌入式系统的资源通常有限, newlib 着重于减少资源使用,同时提供了一组相对完整的 C 标准库函数。 相比于其它版

    2024年01月25日
    浏览(29)
  • 7-LINUX--库文件的生成与使用

    库是一组预先编译好的方法的集合。Linux系统存储的库的位置一般在:/lib 和 /usr/lib。 在 64 位的系统上有些库也可能被存储在/usr/lib64 下。库的头文件一般会被存储在 /usr/include 下或其子目录下。 库有两种,一种是静态库,其命令规则为 libxxx.a,一种是共享库,其命令规则为

    2024年03月16日
    浏览(35)
  • 第十二部分 使用 make 更新函数库文件

    目录 前言  一、函数库文件的成员 二、函数库成员的隐含规则 三、函数库文件的后缀规则 四、注意事项         函数库文件也就是对 Object 文件(程序编译的中间文件)的打包文件。在 Unix 下,一 般是由命令\\\"ar\\\"来完成打包工作。         一个函数库文件由多个文件

    2024年01月20日
    浏览(38)
  • Linux gcc/g++编译链接头文件和库(动态库.so 和 静态库.a)

    最近在学习log4cpp库时,使用g++去编译,却发现自己不会链接...,这哪能行,于是网上钻研,终于解决,现在记录下来分享给遇到同样问题的人。 gcc和g++类似,这里就以g++为例! 刚好用到的log4cpp日志库有头文件和动态库.so和静态库.a,这里就以log4cpp库为例。 在安装好log4cpp库

    2024年02月08日
    浏览(40)
  • ESP32工程中CMake使用及加入第三方SDK库文件

            本文中使用的是乐鑫官方推出的 ESP-IDF v5.1 对 ESP32S3 设备开发,并非是Arduino、Micro-python等第三方工具开发。在ESP-IDF框架中,乐鑫官方已经将 CMake 和 Ninja 编译构建工具 集成到了ESP-IDF中。         ESP-IDF 即乐鑫物联网开发框架,可为在 Windows、Linux 和 macOS 系统平台

    2024年02月20日
    浏览(32)
  • 【Linux基础】库文件

    (꒪ꇴ꒪ ),hello我是 祐言 博客主页:C语言基础,Linux基础,软件配置领域博主🌍 快上🚘,一起学习! 送给读者的一句鸡汤🤔: 集中起来的意志可以击穿顽石! 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏 ​​         在Linux系统中,库文件(Library files)是一

    2024年02月16日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包