Linux环境下动态链接库的生成和使用

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()

  

转载于:https://www.cnblogs.com/yangtze736-2013-3-6/p/4670947.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109391.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【机器学习】几种相似度算法分析

    最近开始研究推荐系统,其中常见的相似度算法有以下几种:1.欧几里得距离欧几里得度量(euclideanmetric)(也称欧氏距离)是一个通常采用的距离定义,指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中的欧氏距离就是两点之间的实际距离。注意事项:a.因为计算是基于各维度特征的绝对数值,所以欧氏度量需要保证各维度指标在相同的刻度级别,比如对身高…

    2022年4月4日
    43
  • triggerEvent_研究儿童通用的方法

    triggerEvent_研究儿童通用的方法假设有一个id为testA的a元素,然后有以下代码(jquery已存在):$(document).ready(function(){ $(‘#testA’).on(‘testEvent’,function(e,data1,data2,data3){ console.log(e,data1,data2,data3); }); varba=documen…

    2025年5月26日
    0
  • Spring Cloud微服务实战

    Spring Cloud微服务实战

    2022年3月12日
    55
  • 为什么当程序员?来听听漂亮国程序员的理由

    为什么当程序员?来听听漂亮国程序员的理由看看在国外当程序员的理由,与我们国内有什么不同!

    2022年5月15日
    30
  • 一个简单的Parallel.ForEach实现

    一个简单的Parallel.ForEach实现在.net的TaskParallelLibrary中有一个很方便的功能Parallel.ForEach,可以实现多任务的并发执行,另外还带着栅栏功能,非常好用。但是这一功能必须需要clr4.0支持(CTP版的不大好用),对于低版本的.net要实现类似功能只有自己写一个了。codeproject上面文章PoorMan’sParallel.ForEachIterator中就有一种简单而…

    2022年7月19日
    8
  • facets学习(1):什么是facets

    facets学习(1):什么是facetsML数据集可以包含数亿个数据点,每个数据点由数百(甚至数千)的特征组成,几乎不可能以直观的方式了解整个数据集。为帮助理解、分析和调试ML数据集,谷歌开源了Facets,一款可视化工具。Fac

    2022年8月4日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号