Win&Linux_编写&加载_动态库-共享库
总阅读次
[vs创建DLL/使用][1]
[1]:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29121609&id=3851844
知识:
- linux下动态链接库(.so)的显式调用和隐式调用
https://blog.csdn.net/lc_910927/article/details/42393121
- DLL中类的显式链接
http://www.moon-soft.com/doc/14639.htm
- Windows关键字
1 | BOOL APIENTRY DllMain(HANDLE hModule,DOWRD dwReason,void * lpReserved) |
- APIENTRY:表明此函数是应用程序的入口点,相当于c的main()函数
- visualstudio2015加载DLL
将编译好的DLL_AGM.lib
和DLL_AGM.dll
还有头文件DLL_AGM.h
文件放入vs工程源码目录里,以及子目录Debug
目录里;
每次更改代码都要替换.dll以及.lib文件,如修改.h文件也要替换.h文件
Linux下编写so
参考文章:
[linux与windows调用动态库so dll文件] [2]
[2]: https://blog.csdn.net/cbbbc/article/details/45102861
add.cpp
1
2
3
4
5
6
7
8
9
int add(int a,int b)
{
int sum;
sum=a+b;
//std::cout<<sum<<std::endl;
return sum;
}add.h
1
2
3
int add(int a,int b);
- 封装成.so
1
g++ add.cpp -fPIC -shared -o libADD.so
生成
libADD.so
调用代码
4. main.cpp
1 |
|
g++链接.so
5.
1 | g++ main.cpp -L. -lADD -Wl,-rpath,./ -o b.out |
VS创建DLL
- 用Visualstudio新建一个工程
Templates
—–>Visual c++
——–>Win32 Project
在Overview Application Settings
选择Application type:
下的DLL
勾选Empty project
通过编译会生成^&*.dll
以及*&^.lib
- VS使用dll
在工程里新建一个
include
文件,将编译dll
工程里的.h
文件放入include
里面在工程目录新建一个
lib
文件夹,将编译dll
工程生成的.lib
文件放入该目录在使用dll工程中设置加载lib,
2018-06-22
隐式加载
add_header.h
1
2
3
4/* add_header.h */
const int add(cosnt int a, const int b);libadd_source.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13int add(const int a, const int b)
{
return a + b;
}
````
编译指令:
```linux
g++ -shared -fPIC libadd_source.cpp -o libadd.so
- main_test.cpp
隐式加载
1 |
|
编译指令:
1 | g++ -o a.out main_test.cpp -L. -ladd -Wl,-rpath,./ |