如何在linux下用matlab生成动态链接库
2017-12-09 · 知道合伙人数码行家
知道合伙人数码行家
向TA提问 私信TA
首先如何制作Linux下的so 文件
首先让我们来看一下,把库函数推迟到程序运行时期载入的好处:
1.可以实现进程之间的资源共享。
什么概念呢?就是说,某个程序的在运行和型中要调用某个动态链接库函数的时候,操作系统首先会查看所有唤轿猜正在运行的程序,看在内存里是否已有此库函数的拷贝了。如果有,则让其共享那一个拷贝;只有没有才链接载入。这样的模式虽然会带来一些“动态链接”额外的开销,却大大的节省了系统的内存资源。C的标准库就是动态链接库,也就是说系统中所有运行的程序共享着同一个C标准库的代码段.
2.将一些程序升级变得简单。用户只需要升级动态链接库,而无需重新编译链接其他原有的代码就可以完成整个程序的升级。Windows 就是一个很好的例子。
3.甚至可以真正坐到链接载入完全由程序员在程序代码中控制。
程序员在编写程序的时候,可以明确的指明什么时候或者什么情况下,链接载入哪个动态链接库函数。你可以有一个相当大的软件,但每次运行的时候,由于不同的操作需求,只有一小部分程序被载入内存。所有的函数本着“有需求才调入”的原则,于是大大节省了系统资源。比如现在的软件通常都能打开若干种不同类型的文件,这些读写操作通常都用动态链接库来实现。在一次运行当中,一般只有一种类型的文件将会被打开。所以直到程序知道文件的类型以后再载入相应的读写函数,而不是一开始就将所有的读写函数都载入,然后才发觉在整个程序中根本没有用到它们
步骤:
首先建立一个函数文件fun.cpp 以及头文件 fun.h
#include <iostream>
void fun1();
void fun2();
#include "fun.h"
using namespace std;
void fun1(){
cout<<"fun1() is called\n";
}
void fun2(){
cout<<"fun2() is called\n";
}
#include "fun.h"
int main()
{
fun1();
fun2();
}
- 接着开始编译 我们的函数库
gcc fun.cpp -fPIC -shared -o libfun.so
- 注意这里的命名方式libXXX.so
g++ Main.cpp -L. -lfun -o MainApp
- 这里要注意,有的人用gcc会出现undefined cout的错误,因为我们用的是C++语言,所以还是要用g++编译
./MainApp
- 会报错,无法加载的shared object
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/你的库目录
- (2)
然后建立我们的Main.cpp
接着就会看见我们的动态库了
然后编译我们的应用函数
-L是指定动态链接库的目录 -l是制定库名字
接下来我们运行
[cpp] view plaincopy
这是因为我们还没有告诉程序动态链接库的位置
三种方法告诉
(1)
更改/etc/ld.so.conf,添加我们的库目录,然后执行ldconf
需要root权限
(3)加入/user/lib 或者/usr/lib64看你的机器位数,貌似拷帆早贝的方法最凑效了,其他方法有时候行不通