在linux和windows用c++编写c接口的动态库
linux
动态的头文件api.h
#ifndef _API_H
#define _API_H #ifdef DLL_IMPLEMENT
#define DLL_EXPORT extern "C"
#else
#define DLL_EXPORT
#endif DLL_EXPORT int mysum(int a, int b); #endif // _API_H
动态库的源文件api.cpp
#define DLL_IMPLEMENT #include "api.h"
#include <iostream> DLL_EXPORT int mysum(int a, int b)
{
std::cout << "This (mysum) is a c++ function." << std::endl;
return a + b;
}
调用动态库的测试代码main.c
#include <stdio.h>
#include "api.h" int main()
{
int sum = mysum(, );
printf("The sum is %d\n", sum);
}
下面在命令行测试:
g++ -shared -fPIC -o libmyapi.so api.cpp #生成动态库
gcc main.c -o a.out -L. -lmyapi #链接动态库生成执行文件
ln -s /path/to/libmyapi.so /usr/lib/libmyapi.so #在系统的动态库搜索路径建立软连接
ldconfig #让系统重新搜索一遍动态库
./a.out #执行,下面是输出
This (mysum) is a c++ function.
The sum is 11
windows
动态的头文件api.h
#ifndef _API_H
#define _API_H #ifdef DLL_IMPLEMENT
#define DLL_EXPORT extern "C" __declspec(dllexport)
#else
#define DLL_EXPORT extern "C" __declspec(dllimport)
#endif #define MYAPI __stdcall DLL_EXPORT int MYAPI mysum(int a, int b); #endif // _API_H
动态库的源文件api.cpp
#define DLL_IMPLEMENT #include "api.h"
#include <iostream>int MYAPI mysum(int a, int b)
{
std::cout << "This (mysum) is a c++ function." << std::endl;
return a + b;
}
调用动态库的测试代码main.c
#include <stdio.h>
#include "api.h"
#pragma comment(lib, "./myapi.lib") int main()
{
int sum = mysum(, );
printf("The sum is %d\n", sum);
}
windows在visual studio中测试即可
over
在linux和windows用c++编写c接口的动态库的更多相关文章
- Qt编写自定义控件插件开放动态库dll使用(永久免费)
这套控件陆陆续续完善了四年多,目前共133个控件,除了十几个控件参考网友开源的代码写的,其余全部原创,在发布之初就有打算将动态库开放出来永久免费使用,在控件比较完善的今天抽了半天时间编译了多个qt版本 ...
- linux系统——ld-linux.so.X查找和加载共享动态库的顺序
ld-linux.so查找共享库的顺序: Glibc安装的库中有一个为ld-linux.so.X,其中X为一个数字,在不同的平台上名字也会不同.可以用ldd查看: #ldd /bin/cat linu ...
- Linux下包含头文件的路径问题与动态库链接路径问题
C/C++程序在linux下被编译和连接时,GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径.自己指定的路径就不说了,这里说明一下系统自动搜索的路径. [1 ...
- linux下如何编译python生成libpython2.5.so动态库
http://biancheng.dnbcw.info/python/245306.html
- windows动态库与Linux动态库
Linux动态库和windows动态库的目的是基本一致的,但由于操作系统的不同,他们在许多方面还是不尽相同.但是尽管有差异Linux动态库的windows动态库还是可以移植的,有一些规则以及经验是必须 ...
- NVIDIA GRID 和 NICE DCV 技术用于实现 Linux 和 Windows® 图形加速虚拟桌面
NVIDIA GRID 和 NICE DCV 技术用于实现 Linux 和 Windows® 图形加速虚拟桌面. NICE DCV: 满足 LINUX 和 WINDOWS 的远程 3D 通过 NICE ...
- linux静态与动态库创建及使用实例
一,gcc基础语法: 基本语法结构:(由以下四部分组成) gcc -o 可执行文件名 依赖文件集(*.c/*.o) 依赖库文件及其头文件集(由-I或-L与-l指明) gcc 依赖文件集(*.c/*.o ...
- Windows动态库学习心得
最近在工作中需要给项目组其他成员提供调用函数,决心抛弃以前“拷贝头文件/源文件”的简陋方法,采用动态库的方式对自己开发的接口进行模块化管理.因之前一直没有机会从事Windows动态库的开发,现借助这个 ...
- Linux动态库的编译与使用 转载
http://hi.baidu.com/linuxlife/blog/item/0d3e302ae2384d3a5343c1b1.html Linux下的动态库以.so为后缀,我也是初次在Linux下 ...
随机推荐
- vue发送请求----vue-resource
使用插件vue-resource 官方提供的接口,在vue官网找不到 但在github中可以找到 安装:cnpm install vue-resource --save 第一步:注意要加--save, ...
- 2018-2019-2 网络对抗技术 20165311 Exp3 免杀原理与实践
2018-2019-2 网络对抗技术 20165311 Exp3 免杀原理与实践 免杀原理及基础问题回答 实验内容 任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil- ...
- vue中router.go、router.push和router.replace的区别
router.go(n) 这个方法的参数是一个整数,意思是在history记录中向前或者后退多少,类似window.history.go(n) router.push(location) 想要导航到不 ...
- en-zh(科学技术)science and technology-2
研究:长期不吃早餐,患心脏病风险增加87% Skipping breakfast could raise risk of heart disease by 87% Skipping breakfast ...
- 使用sessionStorage进行数据存值
<!DOCTYPE html> <head> <meta charset="UTF-8" /> <meta name="view ...
- SQL SERVER 基本操作语句
Sql 是一种结构化的查询语言:Sql是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理‘关系型数据库’系统:Sql对大小写不敏感:Sql不是数据库,是行业标准,是结构化的查询语言 In ...
- 使用java操作elasticsearch(1)
1.安装elasticsearch 这儿用的是5.6.9的版本,下载安装过程较为简单,在官网上下载好后解压到文件夹.需要注意的是在elasticsearch-5.6.9\config下的elastic ...
- 《图解HTTP》读书笔记(二:各种协议与HTTP协议之间的关系)
涉及到DNS协议.TCP协议.IP协议,话不多说,上图:
- 未能执行URL
在 <compilation debug="true"> 下 加入: <buildProviders> <add extension=".h ...
- turtlebot3安装遇到的问题总结
turtlebot3安装遇到的问题总结 问题如下 1.ubuntu mate 开机启动 开始试了很多方法都不行,注意不要输错用户名,不然进不了系统了(进不了解决方法,找个电脑读一下这个turtlebo ...