下面是目录结构:

pengdl@localhost:~$ tree test/
test/
├── fun.c
├── Fun.h
└── t1
    └── main.c

1 directory, 3 files
pengdl@localhost:~$

fun.c

#include <stdio.h>

void fun(void)
{
printf("int the fun\n");
}

Fun.h

extern void fun(void);

main.c

#include <stdio.h>
#include <Fun.h> int main(int argc, const char *argv[])
{
printf("in the main\n");
fun(); return ;
}

在test目录下,制作动态库:

pengdl@localhost:~/test$ ls
fun.c  Fun.h  t1
pengdl@localhost:~/test$ gcc -fPIC -c fun.c
pengdl@localhost:~/test$ ls
fun.c  Fun.h  fun.o  t1
pengdl@localhost:~/test$ gcc -shared fun.o -o libfun.so.1
pengdl@localhost:~/test$ ls
fun.c  Fun.h  fun.o  libfun.so.1  t1
pengdl@localhost:~/test$ ln -s /home/pengdl/test/libfun.so.1 libfun.so

注意:软连接必须指向刚才生产的库,否则链接是会出错!!

pengdl@localhost:~/test$ ls
fun.c  Fun.h  fun.o  libfun.so  libfun.so.1  t1
pengdl@localhost:~/test$ mv libfun.so t1/

执行: gcc main.c  -o main -lfun -L ./ -I ../

注:其中 -L ./是在链接是告诉链接器动态库的搜索路径,因为动态库的软连接在当前目录下,所以需要 -L ./ ,否则链接时因为找不到库而出错。-L ./只是告诉链接器在链接时还需要到当前目录下搜索,并不会覆盖其他库的搜索路径。

pengdl@localhost:~/test/t1$ gcc main.c -lfun -I ../ -L ./
pengdl@localhost:~/test/t1$ ./a.out
./a.out: error while loading shared libraries: libfun.so: cannot open shared object file: No such file or directory
pengdl@localhost:~/test/t1$

原因:没有将共享库libfun.so.1拷贝到/uer/lib下,如果拷到/usr/lib下,软连接libfun.so也应该改变。解决方法二:在链接时指定运行时库的搜索路径:gcc main.c -lfun -I ../ -L ./ -Wl,-rpath=./。解决方法三:修改/etc/ld.so.cache中所缓存的动态库路径(如果支持ld.so.cache的话)。这可以通过修改配置文件/etc/ld.so.conf中指定的动态库搜索路径来改变;

Linux动态库的搜索路径的更多相关文章

  1. Linux动态库(.so)搜索路径

    主要内容: 1.Linux动态库.so搜索路径 编译目标代码时指定的动态库搜索路径: 环境变量LD_LIBRARY_PATH指定的动态库搜索路径: 配置文件/etc/ld.so.conf中指定的动态库 ...

  2. LINUX动态库(.SO)搜索路径(目录)设置方法

    LINUX动态库(.SO)搜索路径(目录)设置方法 [root@VM_0_11_centos ld.so.conf.d]# cat /etc/ld.so.confinclude ld.so.conf. ...

  3. linux动态库默认搜索路径设置的三种方法

    众所周知, Linux 动态库的默认搜索路径是 /lib 和 /usr/lib .动态库被创建后,一般都复制到这两个目录中.当程序执行时需要某动态库, 并且该动态库还未加载到内存中,则系统会自动到这两 ...

  4. Linux动态库的查找路径

    前两天写了一个动态库,然后试图编译到程序里面去运行,结果发现编译的时候通过gcc的-L参数来指定路径仅仅能让编译通过,运行时还是会出问题的. 比如下面这个例子: main.c是主程序,sum.c中间含 ...

  5. linux 动态库加载路径修改

    1.在 /etc/ld.so.conf 文件中添加搜索路径,重启或者 ldconfig 生效: 2.在 /etc/ld.so.conf.d 目录下添加 *.conf 文件,其中可以添加搜索路径,重启获 ...

  6. linux动态库加载路径修改

    1.在 /etc/ld.so.conf 文件中添加搜索路径,重启或者 ldconfig 生效: 2.在 /etc/ld.so.conf.d 目录下添加 *.conf 文件,其中可以添加搜索路径,重启获 ...

  7. 【转载】Linux动态库搜索路径的技巧

    转自:http://soft.chinabyte.com/os/232/11488732_2.shtml 众所周知,Linux动 态库的默认搜索路径是/lib和/usr/lib.动态库被创建后,一般都 ...

  8. linux动态库加载时搜索路径

    摘自http://gotowqj.iteye.com/blog/1926613 对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading shared librar ...

  9. Linux动态库搜索路径的技巧

    众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib.动态库被创建后,一般都复制到这两个目录中.当程序执行时需要某动态库,并且该动态库还未加载到内存中,则系统会自动到这两个默认搜索路径 ...

随机推荐

  1. 24单行插入与批量插入-insert(必学)-天轰穿sqlserver视频教程

    大纲:insert语句,简单插入数据与批量插入数据 为了冲优酷的访问量,所以这里只放优酷的地址了,其实其他网站还是都传了的哈. 代码下载http://www.cnthc.com/?/article/1 ...

  2. SSD在SQLServer中的应用

        一. 首先,回顾一下 SSD 的读写特性 (1)有限次数写:        (2)随机读性能最好:        (3)顺序读性能好:        (4)顺序写性能差:        (5) ...

  3. RESTful 接口规范

    原文地址:http://www.coderli.com/translate-restful-standard-resolved OneCoder最近一直在使用Restful API,最近正好看到一篇自 ...

  4. 分布式代码管理 tortoisehg mercurial

    下载客户端:            https://bitbucket.org/tortoisehg/files/downloads mercurial客户端下载:http://mercurial.s ...

  5. 用ASP.NET Core 1.0中实现邮件发送功能

    准备将一些项目迁移到 asp.net core 先从封装类库入手,在遇到邮件发送类时发现在 asp.net core 1.0中并示提供SMTP相关类库,于是网上一搜发现了MailKit 好东西一定要试 ...

  6. C#点点滴滴:枚举enum

    一.enum简介 enum为枚举类型,即一种由一组称为枚举数列表的命名常量组成的独特类型 在声明一个枚举时,要指定该枚举可以包含的一组可接受的实例值,还可以给值指定易于记忆的名称 注:如果在代码中试图 ...

  7. Intellij IDEA 14的注册机

    将以下代码保存成keygen.java import java.math.BigInteger; import java.util.Date; import java.util.Random; imp ...

  8. 在java项目中使用log4j的实例

    测试log4j的项目结构 Log4j.properties的路径为    src/config/log4j Log4j.properties文件的内容 下面定义日志输出级别是 INFO,并且配置了2个 ...

  9. Selenium实战脚本集(3)--抓取infoq里的测试新闻

    描述 打开infoq页面,抓取最新的一些测试文章 需要抓取文章的标题和内容 如果你有个人blog的话,可以将这些文章转载到自己的blog 要求 不要在新窗口打开文章 自行了解最新的测试思潮与实践

  10. css 单位转换

    如今 css 的单位越来越多了,px, em, rem, 微信的小程序又出来个 rpx 可以用 less 自动生成需要的单位 但当你只是想把一个已有的页面转换成小程序时,可能更需要一个 px -> ...