Linux环境下动态链接库的生成和使用
使用自己封装的so时遇到了点问题,本着简便原则决定写个demo看看,顺便记录下整个过程。
1)生成so所需的文件如下:
print.h
#ifndef __print_h__
#define __print_h__ void print(void); #endif
print.cpp
#include <stdio.h>
#include "print.h" void print(void)
{
printf("hello world.\n");
}
bye.h
#ifndef __bye_h__
#define __bye_h__ void bye(void); #endif
bye.cpp
#include <stdio.h>
#include "bye.h" void bye(void)
{
printf("bye bye.\n");
}
midd.h
#ifndef __midd_h__
#define __midd_h__ class Middleware{
public:
Middleware();
~Middleware(); bool data(const char *p);
};
#endif
midd.cpp
#include "print.h"
#include "bye.h"
#include "midd.h"
#include <stdio.h> Middleware::Middleware()
{
printf("Middleware::Middleware()\n");
} Middleware::~Middleware()
{
printf("Middleware::~Middleware()\n");
} bool Middleware::data(const char *p)
{
print();
bye(); return true;
}
2)编译过程
g++ -c -fPIC -shared bye.cpp
g++ -c -fPIC -shared print.cpp
g++ -c -fPIC -shared midd.cpp
3)链接过程
g++ -o test.so midd.o print.o bye.o -fPIC -shared
4)动态链接库的使用
现在写一个main.cpp来调用so,看看效果
main.cpp
#include "midd.h"
int main()
{
Middleware middleware;
middleware.data("xxx"); return 0;
}
生成可执行文件:
g++ -o test main.cpp ./test.so
测试:
./test
Middleware::Middleware()
hello world.
bye bye.
Middleware::~Middleware()
Linux环境下动态链接库的生成和使用的更多相关文章
- 在linux环境下使用itext生成pdf
转载请注明出处 https://www.cnblogs.com/majianming/p/9537173.html 项目中需要对订单生成pdf文件,在不断的尝试之后,终于生成了比较满意的pdf文档. ...
- 【ARM-Linux开发】Linux环境下使用eclipse开发C++动态链接库程序
Linux环境下使用eclipse开发C++动态链接库程序 Linux中也有类似windows中DLL的变成方法,只不过名称不同而已.在Linux中,动态链接叫做Standard Object,生成的 ...
- Linux环境下如何生成core文件
Linux环境下进程发生异常而挂掉,通常很难查找原因,但是一般Linux内核给我们提供的核心文件,记录了进程在崩溃时候的信息.但是生成core文件需要设置开关,具体步骤如下: 1.查看生成core文件 ...
- 快速解决Ubuntu/linux 环境下QT生成没有可执行文件(application/x-executable)
快速解决Ubuntu/linux 环境下QT生成没有可执行文件(application/x-executable)(转载) 问题描述 与windows环境下不同,linux选择debug构建时并不 ...
- linux 环境下运行STS时 出现must be available in order to run STS
linux 环境下运行ECLIPSE时 出现 “ A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be avai ...
- Linux环境下段错误的产生原因及调试方法小结(转)
最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且 项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的“段错误”(Segmentation F ...
- 【环境配置】Linux环境下下载、配置java环境、安装eclipse、建立eclipse快捷方式详解
一.首先是下载Java JDK 到目前为止的最新版本为(jdk1.8.0_60),有两种方式进行下载: 1.使用shell来进行下载,可使用如下命令直接进行下载: wget --no-check-ce ...
- Linux环境下段错误的产生原因及调试方法小结
转载自http://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之 ...
- linux环境下安装sphinx中文支持分词搜索(coreseek+mmseg)
linux环境下安装sphinx中文支持分词搜索(coreseek+mmseg) 2013-11-10 16:51:14 分类: 系统运维 为什么要写这篇文章? 答:通过常规的三大步(./confi ...
随机推荐
- 实现二叉树的基本操作(Java版)
近期研究了一下二叉树,试着用Java语言实现了二叉树的基本操作,下面分享一下实现代码: package com.sf.test; import java.util.ArrayDeque; import ...
- mysql默认字符编码设置教程:my.ini设置字符编码
在mysql的安装目录下找到my.ini,如果没有就把my-medium.ini复制为一个my.ini即可. 打开my.ini以后, [client] default-character-set=ut ...
- Unity 之 Shader 面的剔除 Cull
面的剔除 Cull 在渲染的时候,默认情况下是只有朝向摄像机的面才会被渲染,可以告诉Unity,我想渲染哪一个朝向的面,使用Cull命令在计算体积阴影的时候会用到对Cull的操作来计算和物体相交的投影 ...
- cocos2d-js反射
如何在android平台上使用js直接调用Java方法 在cocos2d-js 3.0beta中加入了一个新特性,在android平台上我们可以通过反射直接在js中调用java的静态方法.它的使用方法 ...
- C#中一个窗口是一个类呢,还是一个窗口类的实例呢?(转)
C#中一个窗口是一个类呢,还是一个窗口类的实例呢? 答: 没有一个人说到重点上. 一个窗口,它不是仅仅用一个类可以描述的: 首先,这个窗口的数据类型类型,是从Form类派生下来的,也就是说它的定义是一 ...
- SQL基础问题(一)
1.sql是什么? 结构化查询语言(Structured Query Language). 2.结构化查询语言的分类? 数据定义语言(DDL)Data Definition Language 操作 ...
- Node.js基本使用(超基础)
Node.js是什么 Node.js是一个能够在服务器端运行JavaScript的开放源代码.跨平台JavaScript运行环境 Node采用Google开发的V8引擎运行js代码,使用事件驱动.非阻 ...
- DeepLearning 学习资料
1 sotfmax 函数: stanford UFLDL: http://deeplearning.stanford.edu/wiki/index.php/Softmax%E5%9B%9E%E5%BD ...
- charCodeAt方法以及Unicode中文汉字编码范围
js的charCodeAt() 方法可返回指定位置的字符的 Unicode 编码.这个返回值是 0 - 65535 之间的整数. 在字符串 "Hello world!" 中,我们将 ...
- jQuary总结2: jQuery选择器
1 什么是jQuery选择器 获取页面元素,并且把页面元素包装成jQuery对象的方式 2 为什么要学习jQuery选择器 为了更加方便的获取页面上的元素,并且将元素包装起来,使我们编写程序时更加便 ...