您好,欢迎来到爱玩科技网。
搜索
您的当前位置:首页Linux下编写简单的动态链接库

Linux下编写简单的动态链接库

来源:爱玩科技网

(1)Linux下编写动态链接库。通常静态链接库是编译的时候和源文件一起编译生成可执行文件的。动态链接库则不是,它是一个已经编译好的文件(静态则不是),只有当程序运行的时候(但是编译的时候要将动态链接库的信息加载进来),它才去找动态链接库拿它想用的一些函数。而且动态链接库可以提高通用性,编写一个动态链接库可以让很多人一起用。有点类似类?

test_so.h

#ifndef _TEST_SO_H
#define _TEST_SO_H

#include <stdio.h>
#include <stdlib.h>

void test_a();
void test_b();
void test_c();

#endif


test_a.c

#include "test_so.h"

void test_a()
{
    printf("this is test_a()\n");
}

test_b.c

#include "test_so.h"
void test_b()
{
    printf("this is test_b()\n");
}


test_c.c

#include "test_so.h"
void test_c()
{
    printf("this is test_c()\n");
}

  

然后将这些文件编译为动态链接库gcc test_a.c test_b.c test_c.c --shared -fPIC -o libtest.so,则生成libtest.so文件(它已经编译好了),和普通可执行程序不同,它并没有main()。

在看如何调用它

编写test.c

#include "test_so.h"

int main(void)
{
    test_a();
    test_b();
    test_c();
    return 0;
}

然后通过ldd ./test查看有哪些动态链接库和可执行程序有关联。

结果发现libtest.so没有关联。

运行./test出现:

./test: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory

也就是说找不到这个动态链接库,但是我们已经在编译test.c的时候加入路径了?

这时候修改LD_LIBRARY_PATH变量

#vim ~/.bashrc
添加:
LD_LIBRARY_PATH = $LD_LIBRARY_PATH:/home/xxx/Test
export LD_LIBRARY_PATH
退出以后
#source ~/.bashrc


或者/etc/ld.so.conf添加动态链接库的路径。

#vim /etc/ld.so.conf
添加一行:/home/xxx/Test
然后刷新一把
#/sbin/ldconfig -v
再编译执行成功。

  



转载于:https://www.cnblogs.com/floatedclouds/archive/2011/10/24/2222412.html

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- aiwanbo.com 版权所有 赣ICP备2024042808号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务