Ubuntu将c++编译成.so文件并测试

一、准备cpp和h文件

  • 创建test.cpp

cpp中定义相加的函数funcAdd,给出函数的细节代码

#include <iostream>
using namespace std;int funcAdd(int x, int y)
{return x+y;
}
  • 创建test.h

h中声明定义的函数,不需要任何细节

#ifndef __TEST__
#define __TEST__
using namespace std;int funcAdd(int x, int y);#endif

二、生成.so文件

  • 生成.so文件

将test.cpp和test.h放在同一目录下,在该目录打开终端,运行以下代码

g++ -fpic -shared -o libtest.so test.cpp

此时会生成libtest.so文件,包括了test中的所有函数,已经自动读取了头文件。

  • 将.so文件复制到路径/usr/lib
sudo cp libtest.so /usr/lib
// 删除文件
// sudo rm -rf /usr/lib/libtest.so

三、生成测试文件并运行

  • 创建测试文件main.cpp
#include "test.h"
#include <iostream>
using namespace std;int main() {cout<<funcAdd(2,3);return 0;
}
  • 编译main.cpp并链接.so生成可执行文件main
g++ -o main main.cpp -L. -ltest

这一步生成了可执行文件main,其中main.cpp代码中调用了.so文件中的函数

  • 运行可执行文件main
./main

在这里插入图片描述

参考链接

https://blog.csdn.net/mu_xing_/article/details/116978567

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/505767.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

李沐动手学习深度学习——4.2练习

1. 在所有其他参数保持不变的情况下&#xff0c;更改超参数num_hiddens的值&#xff0c;并查看此超参数的变化对结果有何影响。确定此超参数的最佳值。 通过改变隐藏层的数量&#xff0c;导致就是函数拟合复杂度下降&#xff0c;隐藏层过多可能导致过拟合&#xff0c;而过少导…

Java项目:31 基于SSM的勤工俭学管理系统

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 勤工助学系统有管理员&#xff0c;部门管理员&#xff0c;用户三个角色。 管理员功能有个人中心。管理员管理&#xff0c;部门管理员管理&…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:Popup控制)

给组件绑定popup弹窗&#xff0c;并设置弹窗内容&#xff0c;交互逻辑和显示状态。 说明&#xff1a; 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 popup弹窗的显示状态在onStateChange事件回调中反馈&#xff0c;其显…

初阶数据结构:二叉树

目录 1. 树的相关概念1.1 简述&#xff1a;树1.2 树的概念补充 2. 二叉树2.1 二叉树的概念2.2 二叉树的性质2.3 二叉树的存储结构与堆2.3.1 存储结构2.3.2 堆的概念2.3.3 堆的实现2.3.3.1 堆的向上调整法2.3.3.2 堆的向下调整算法2.3.3.3 堆的实现 1. 树的相关概念 1.1 简述&a…

MyBatis 学习(六)之动态 SQL

目录 1 动态 SQL 介绍 2 if 标签 3 where 标签 4 set 标签 5 trim 标签 6 choose、when、otherwise 标签 7 foreach 标签 8 bind 标签 1 动态 SQL 介绍 动态 SQL 是 MyBatis 强大特性之一&#xff0c;极大的简化我们拼装 SQL 的操作。MyBatis 的动态 SQL 是基于 OGNL 的…

网络编程(IP、端口、协议、UDP、TCP)【详解】

目录 1.什么是网络编程&#xff1f; 2.基本的通信架构 3.网络通信三要素 4.UDP通信-快速入门 5.UDP通信-多发多收 6.TCP通信-快速入门 7.TCP通信-多发多收 8.TCP通信-同时接收多个客户端 9.TCP通信-综合案例 1.什么是网络编程&#xff1f; 网络编程是可以让设…

【Vue3】PostCss 适配

px 固定的单位&#xff0c;不会进行自适应。rem r root font-size16px 1rem16px&#xff0c;但是需要手动进行单位的换算vw vh 相对于视口的尺寸&#xff0c;不同于百分比&#xff08;相对于父元素的尺寸&#xff09;375屏幕 1vw 3.75px 利用插件进行 px&#xff08;设计稿&…

SpringCloudAlibaba介绍

Spring Cloud Alibaba Spring Cloud Alibaba 是什么&#xff1f;微服务全景图核心特色 大家好&#xff0c;我叫阿明。下面我会为大家准备Spring Cloud Alibaba系列知识体系&#xff0c;结合实战输出案列&#xff0c;让大家一眼就能明白得技术原理&#xff0c;应用于各公司得各…

Github项目推荐-LightMirrors

项目地址 https://github.com/NoCLin/LightMirrors 项目简述 “LightMirrors是一个开源的缓存镜像站服务&#xff0c;用于加速软件包下载和镜像拉取。目前支持DockerHub、PyPI、PyTorch、NPM等镜像缓存服务。 当前项目仍处于早期阶段。”–来自项目说明。 也就是说&#xff…

如何解决线程安全问题(synchronized、原子性、产生线程不安全的原因,锁的特性,加锁的方式等等干货)

文章目录 &#x1f490;线程不安全的示例&#x1f490;锁的特性&#x1f490;产生线程不安全的原因&#xff1a;&#x1f490;加锁的三种方式 &#x1f490;线程不安全的示例 对于线程安全问题&#xff0c;这里用一个例子进行讲解&#x1f447;&#xff1a; 我现在定义一个变…

CTFHUB 命令执行

命令执行 原理&#xff1a; 在编写程序的时候&#xff0c;当碰到要执行系统命令来获取一些信息时&#xff0c;就要调用外部命令的函数&#xff0c;比如php中的exec()、system()等&#xff0c;如果这些函数的参数是由用户所提供的&#xff0c;那么恶意用户就可能通过构造命令拼…

MogaNet实战:使用MogaNet实现图像分类任务(一)

文章目录 摘要安装包安装timm 数据增强Cutout和MixupEMA项目结构计算mean和std生成数据集 摘要 论文&#xff1a;https://arxiv.org/pdf/2211.03295.pdf 作者多阶博弈论交互这一全新视角探索了现代卷积神经网络的表示能力。这种交互反映了不同尺度上下文中变量间的相互作用效…