如何在linux下用matlab生成动态链接库

 我来答
huanglenzhi
2017-12-09 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517195
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部

首先如何制作Linux下的so 文件

首先让我们来看一下,把库函数推迟到程序运行时期载入的好处:

1.可以实现进程之间的资源共享。

什么概念呢?就是说,某个程序的在运行中要调用某个动态链接库函数的时候,操作系统首先会查看所有正在运行的程序,看在内存里是否已有此库函数的拷贝了。如果有,则让其共享那一个拷贝;只有没有才链接载入。这样的模式虽然会带来一些“动态链接”额外的开销,却大大的节省了系统的内存资源。C的标准库就是动态链接库,也就是说系统中所有运行的程序共享着同一个C标准库的代码段.

2.将一些程序升级变得简单。用户只需要升级动态链接库,而无需重新编译链接其他原有的代码就可以完成整个程序的升级。Windows 就是一个很好的例子。

3.甚至可以真正坐到链接载入完全由程序员在程序代码中控制。

程序员在编写程序的时候,可以明确的指明什么时候或者什么情况下,链接载入哪个动态链接库函数。你可以有一个相当大的软件,但每次运行的时候,由于不同的操作需求,只有一小部分程序被载入内存。所有的函数本着“有需求才调入”的原则,于是大大节省了系统资源。比如现在的软件通常都能打开若干种不同类型的文件,这些读写操作通常都用动态链接库来实现。在一次运行当中,一般只有一种类型的文件将会被打开。所以直到程序知道文件的类型以后再载入相应的读写函数,而不是一开始就将所有的读写函数都载入,然后才发觉在整个程序中根本没有用到它们

步骤:

首先建立一个函数文件fun.cpp 以及头文件 fun.h

[cpp] view plaincopy

  • #include <iostream>  

  • void fun1();  

  • void fun2();  


  • [cpp] view plaincopy

  • #include "fun.h"  

  • using namespace std;  

  • void fun1(){  

  • cout<<"fun1() is called\n";  

  • }  

  • void fun2(){  

  • cout<<"fun2() is called\n";  

  • }  

  • 然后建立我们的Main.cpp

    [cpp] view plaincopy

  • #include "fun.h"  

  • int main()  

  • {  

  • fun1();  

  • fun2();  

  • }  

  • 接着开始编译 我们的函数库
  • [cpp] view plaincopy

  • gcc fun.cpp -fPIC -shared -o libfun.so  

  • 注意这里的命名方式libXXX.so  
  • 接着就会看见我们的动态库了

    然后编译我们的应用函数

    [cpp] view plaincopy

  • g++ Main.cpp -L. -lfun -o MainApp  

  • 这里要注意,有的人用gcc会出现undefined cout的错误,因为我们用的是C++语言,所以还是要用g++编译
  • -L是指定动态链接库的目录  -l是制定库名字

    接下来我们运行

    [cpp] view plaincopy

  • ./MainApp  

  • 会报错,无法加载的shared object
  • 这是因为我们还没有告诉程序动态链接库的位置

    三种方法告诉

    (1)

    [cpp] view plaincopy

  • export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/你的库目录  

  • (2)
  • 更改/etc/ld.so.conf,添加我们的库目录,然后执行ldconf  

    需要root权限

    (3)加入/user/lib 或者/usr/lib64看你的机器位数,貌似拷贝的方法最凑效了,其他方法有时候行不通

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式