在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下 ...
随机推荐
- 如何组织AxTOCControl里面的数据
如何组织AxTOCControl里面的数据,实际上是组织AXMapControl的数据,将添加的数据进行整理.代码在最后面. 思路参考自: https://blog.csdn.net/u0124887 ...
- High Performance Networking in Google Chrome
小结: 1. 小文件存储于一个文件中: 在内部,磁盘缓存(disk cache)实现了它自己的一组数据结构, 它们被存储在一个单独的缓存目录里.其中有索引文件(在浏览器启动时加载到内存中),数据文件( ...
- 队列->队列的表示和实现
文字描述 队列是和栈相反,队列是一种先进先出(first in first out,缩写FIFO)的线性表,它只允许在表的一端进行插入,而在另一端进行删除.和生活中的排队相似,最早进入队列的元素最早离 ...
- jmeter常用插件介绍
一.下载安装及使用 下载地址:jmeter-plugins.org 安装:下载后文件为plugins-manager.jar格式,将其放入jmeter安装目录下的lib/ext目录,然后重启jmete ...
- com.alibaba.druid.pool.DruidDataSource : {dataSource-2} init error
这几天准备写一个项目,其中的整合druid的时候,发现出现了下面这个错误.找了好久都没有找到.网上的各种解决方法都不对. 2018-11-07 16:26:28.940 INFO 19684 --- ...
- Docker 私有仓库建立(加密和用户验证)
(一)生成证书1.mkdir /certs2.cd /certs 3.生成自签名证书 sudo openssl req -newkey rsa:2048 -new -nodes -x509 -days ...
- 59A
#include <stdio.h> #include <string.h> #define MAXSIZE 120 int main() { int cntlow=0; in ...
- Ubuntu16.04调整屏幕分辨率至1920*1080
安装好ubuntu 16.04桌面版后,发现屏幕分辨率调整选项里没有1920*1080这一选项,经过一番查找,可通过如下方式进行屏幕分辨率设置.以下操作均在ubuntu 16.04桌面版操作,不要用远 ...
- UML作业第二次:类图中类的表示
1.关于类图的学习: 类图显示了系统的静态结构. 类:类图中的主要元素,用矩形表示.矩形的上层表示类名.中层表示属性.下层表示方法. 类之间的关系:关联.依赖.聚集.泛化和实现五种. 2.五种类间关系 ...
- 安装rosetta2016时出现git@172.16.25.11s password: \r\nPermission denied错误,解决方法。
当在source目录执行 ./external/scons-local/scons.py -j8 mode=release bin 时,报错 git@.11s password: \r\nPermis ...