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

ffmpeg2.6.2在Ubuntu下使用NDK编译成.so文件 参考文章:http://www.cnblogs.com/wainiwann/p/3785485.html ------------------------------------------------------------------------- 1、 配置环境: 安装Ubuntu 10.04.4 2、下载ffmpeg-2.6.2.tar.bz2 3、下载android-ndk- 阅读详情

一、准备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.youkuaiyun.com/mu_xing_/article/details/116978567

【反编译系列】一、反编译 .so 文件(IDA Pro) 阅读详情

相关推荐

一、使用makefile生成.so文件

-----查找发现makefile编译动态库时,找不到链接符号也是允许编译通过的,那最好是加上限制条件,在makefile加上 -Xlinker –unresolved-symbols=ignore-in-shared-libs ,让其报错,把未定义的符号给报错出来。这里先将所有.c 文件编译为 .o 文件,这样后面更改某个 .c 文件时,其他的 .c 文件将不在编译,而只是编译有更改的 .c 文件,可以大大提高大项目中的编译速度。链接时,未增加-L 路径依赖,-l 库依赖。

gogo小Sa的专栏 4036

so文件编译

项目交付的时候,为了加密源码,将py文件编译为.so文件。 1. 单个py文件编译 单个文件的编译方法如下,在setup.py文件中编写下列代码,使用命令:python3 setup.py build_ext,执行编译命令 from Cython.Build import cythonize from distutils.core import setup import os path = '' files = os.listdir(path) source_files = [] for i in fil

shlhhy的博客 2790

Qt C++项目集成MeloTTS.cpp:纯C++离线TTS引擎的完整实践指南

文本转语音(TTS)技术是实现人机交互和信息无障碍访问的核心功能之一,其原理是将文本数据通过声学模型和声码器转换为自然流畅的语音波形。在桌面应用开发中,TTS能够显著提升用户体验,尤其适用于教育软件、辅助工具和工业监控等需要语音播报的场景。传统的TTS方案往往面临跨平台兼容性差、依赖网络或运行时环境复杂等挑战。本文聚焦于纯C++实现的轻量级TTS引擎MeloTTS.cpp,深入探讨其在Qt C++项目中的集成方案。通过CMake构建系统管理依赖,结合Pimpl模式封装核心API,并设计异步任务队列管理语音合

weixin_34068198的博客 659

C++编写、生成、调用so库详解(一)

开发中经常会用到so库,大多是调用第三方的so库,偶尔也需要自己封装一个so库给别人调用,这边就记录一下开发so库的一个过程.首先我们这边是在Android Studio中开发的,所以仅描述在Android环境下开发过程,当然也可以用其他工具开发.

田一一的博客 5482

PaddleOCR C++推理库编译:解决YAML-CPP链接错误的完整指南

在C++项目开发中,依赖管理是构建过程中的关键环节,尤其涉及第三方库的集成。CMake作为主流的跨平台构建工具,通过find_package机制管理库的查找与链接,其原理在于解析库提供的配置文件,自动设置包含路径和链接库。这一机制的技术价值在于实现项目依赖的自动化管理,提升构建的可移植性和可重复性。然而,当依赖库的CMake配置文件缺失或路径不匹配时,就会出现典型的“未定义引用”链接错误,这在集成复杂库如PaddleOCR时尤为常见。应用场景广泛存在于计算机视觉、工业自动化等需要部署深度学习模型的项目中。本

weixin_33985679的博客 407

so库的编译及调用

1.编写接口函数 addVal.cpp #include "stdio.h" int addVal(int a, int b) { return a + b; } 编写Android.mk,Application.mk将接口函数编译成so库文件 Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libAddVal LOCAL_SRC_FILES := main.cpp inclu.

qq_24946843的博客 919

Ubuntu下使用个g++将cpp文件封装为.so共享库文件

转载自https://blog.csdn.net/r1141207831/article/details/102616466侵删 (注:由于项目需求,需要将cpp文件进行封装使用,特记录在此以备以后不时之需,以下过程是本人亲自走过的过程,使用的Ubuntu1604系统,可能有一些不足之处,还望不吝批评指正) 1、先创建一个test.cpp文件以及test.h文件,简单示例如下: //test.cpp #include "test.h" using namespace std; voi...

weixin_39450742的博客 755

Ubuntu 16.04环境下libjson库编译成.so文件教程

libjson是一个用于处理JSON数据格式的C++库,它提供了简单易用的接口,用于解析、生成、操作JSON数据。JSON(JavaScript Object Notation)已经成为数据交换的一种标准格式,广泛应用于网络通信、数据存储和配置文件等领域。libjson库为开发者提供了一个高效、可移植的解决方案,以简化JSON数据的处理。使用Git下载完成后,通常会得到一个压缩包或者一个可以直接操作的文件夹。

weixin_42443533的博客 1014

C++ 封装调用SO简单示例 - Ubuntu

生成 .so 文件 创建:a.hpp #include<iostream> using namespace std; class A{ public: A(){}; ~A(){}; void func(); }; 创建:a.cpp #include "a.h" using namespace std; void A::func() { cout <&l...

_提拉米苏的博客 2891

玩转ubuntu18 --机器视觉方面(yolo算法识别及摄像头和cmake问题解决)

玩转ubuntu18 --机器视觉方面(yolo v3算法识别) 1.YOLO的简介 工作原理 先前的检测系统重新调整分类器或本地化器以执行检测。他们将模型应用于多个位置和比例尺的图像。图像的高分区域被视为检测。 我们使用完全不同的方法。我们将单个神经网络应用于整个图像。该网络将图像划分为区域,并预测每个区域的边界框和概率。这些边界框按预测概率加权。 我们的模型比基于分类器的系统具有几个优势。它在测试时间查看整个图像,因此其预测由图像中的全球上下文提供信息。它还通过单一网络评估进行预测,这与R-CNN等系统

qq_53951823的博客 1555

vmware vsphere5---部署vCSA(VMware vCenter Server)附带第二阶段安装报错解决方案

因为这份文档我是边做边写的,遇到问题重新装了好几次所以IP会很乱ESXI主机为192.168.20.10VCSA为192.168.20.7,后台为192.168.20.7:5480后期请自行对应,后面的192.168.20.57请对应192.168.20.7,或根据自己的来。

m0_70212665的博客 5710

jni中多个cpp类的使用

主要完成的功能是使用生成jni对应的Test.h,新建Test.cpp写入内容,再去生成libTest.so,然后在Java类中加载

孤独的糖三角 2602

WSL子系统启动报错 Wsl/Service/CreateInstance/CreateVm/HCS_E_SERVICE_NOT_AVAILABLE

WSL子系统启动报错 :Wsl/Service/CreateInstance/CreateVm/HCS_E_SERVICE_NOT_AVAILABLE 于是分析原因,最终发现是Windows功能中的虚拟机平台功能不知道什么时候被取消了。

Linux I Tell U 6万+

C++---初识《通过g++ / makefile 编译和调用动态库so文件》(ubuntu)

C++---初识《通过g++ / makefile 编译和调用动态库so文件》(ubuntu) ------------------------目录----------------------------- 一、通过makefile 编译和调用动态库so文件 二、通过makefile 编译和调用动态库so文件 -------------------------正文-------...

weixin_30362083的博客 967

手把手教你用RC桥式振荡器生成1Hz-1MHz正弦波(附完整电路图)

本文详细介绍了如何从零构建RC桥式振荡器,实现1Hz-1MHz正弦波的生成。通过核心元件选型、参数设计、电路搭建与优化等步骤,帮助读者掌握振荡器的工作原理和实战技巧。特别适合电子实验和信号处理领域的初学者和工程师,附完整电路图和常见问题解决方案。

weixin_30338481的博客 466

JS逆向-Protobuf逆向解析

目录一、什么是Protobuf二、Protobuf环境配置三、Protobuf实例序列化与反序列化四、逆向解析 Protobuf案例1、python序列化2、python反序列化 一、什么是Protobuf 1、protocol buffers介绍:是一种语言无关、平台无关、可扩展的序列化结构数据的方法。严格说不算是加密,只能是叫序列化结构数据,让可读变为疑似的乱码,那反序列化即让疑似的乱码变为可读 2、protobuf使用流程的前提是有一个.proto文件,对逆向而言就是还原.proto文件,选择

十一姐的博客 1万+

ubuntu编译FFmpeg并使用编译好的so使用c++进行编码和解码

得到一个安卓系统中,编码和解码要跑在native层的需求。根据第2点,需要编译X86平台下的FFmpeg的so。以下记录一下在X86平台下编译遇到的问题1.下载ffmpeg源码,可以从github上下载,也可以从官网下载,我这边直接从github中下载最新的源码。2.因为我要编译一个可以encode和decode的so,所以还需要下载一个libx264,下载地址下载完后cd进到x264的文件夹中执行以下命令。

weixin_42255569的博客 1684

RK3568项目(四)--uboot启动流程之启动模式选择

本章接着上面,接着来分析uboot启动流程,设计vendor、按键、驱动模式的选择等

文艺小少年的博客 584

g++ 编译mysql动态库_C++---初识《通过g++ / makefile 编译和调用动态库so文件》(ubuntu)...

C++---初识《通过g++ / makefile 编译和调用动态库so文件》(ubuntu)------------------------目录-----------------------------一、通过makefile 编译和调用动态库so文件二、通过makefile 编译和调用动态库so文件-------------------------正文------------------...

weixin_29000417的博客 560

Unity的粒子系统使用shadergraph(内置管线)制作的一个顶点偏移shader,但是粒子模型移动时,顶点也会偏移?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1174

29. 如何通过 ABAP 代码给 SAP OData 元数据增添注解

我们先看下效果,在 MPC_EXT 类的 DEFINE 方法里编写 ABAP 代码之后,用 Postman 使用 url 访问 OData metadata,在返回的数据里,能看到我们用 ABAP 代码添加的自定义注解。你好,请问可以不可以在odata里面通过什么设置,从而自动给metadata.xml中加上注解,实现value help的功能,还是说每次需要在metadata.xml中修改?的词汇引用,然后为命名空间 com.sap.vocabularies.UI.v1 声明了一个别名。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1656

NDK下 将Platinum SDK 编译成so库 (android - upnp)

Platinum UPnP SDK 是一个跨平台的C++库,利用该库,可以很容易就构建出DLNA/UPnP控制点(DLNA/UPnP Control Point)和DLNA/UPnP设备(DLNA/UPnP Device),其中包括有UPnP AV Media Server, Media Render & Control Point的例子。它可以在Windows, Mac OSX, Linux, 

braddoris的专栏 3554

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C调用python并封装成so遇到的问题及解决办法(win&linux)

项目中需要对编写的python程序用C语言进行封装,并编写脚本使生成so库以便调用,因为初次实现相关程序,遇到了不少问题。

qq_43493425的博客 749

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android studio如何调用linux下交叉编译的so库

背景:android studio上需要使用别的同事用linux下(c++写)编译好的的so库,注意不是用c++源码放在android studio上编译; 实现原理:android studio实现JNI规范的接口,再用这套接口去调用linux下编好的so库,这个需要linux调用NDK中的交叉编译工具链进行交叉编译生成so库; 步骤: 1.NDK安装在linux环境上(ubuntu 14.04 64位系统) 通常下载r17(包括该版本)以下的版本,因为r18以上的版本gcc/g++已被改动成cl

光明游侠的博客 875

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Ubuntu 下php调用c语言.so文件

写一个php模块(php extension),在php中调用该模块内的函数,再通过该模块来调用so中的函数。 首先做一个简单的so文件: /** * hello.c * To compile, use following commands: * gcc -O -c -fPIC -o hello.o hello.c * gcc -shared -o lib...

weixin_30951231的博客 159

python调用c 接口_Python调用C/C++的种种方法

Python是解释性语言, 底层就是用c实现的, 所以用python调用C是很容易的, 下面就总结一下各种调用的方法, 给出例子, 所有例子都在ubuntu9.10, python2.6下试过.1. Python 调用 C (base)想在python中调用c函数, 如这儿的fact#includeint fact(int n){if (n <= 1)return 1;elsereturn...

weixin_39861734的博客 1242
上一篇: (13.4)Latex之Overleaf在线编辑
下一篇: SAT和SMT介绍及求解器使用
Netceor
博客等级 码龄9年 1046粉丝 306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值