LInux中共享库的嵌套调用例子

亲测成功!
参考网址:
嵌套例程:https://my.oschina.net/moooofly/blog/506466.html
linux找不到动态链接库 .so文件的解决方法https://www.cnblogs.com/xudong-bupt/p/3698294.html
Linux共享库、静态库、动态库详解:
https://www.cnblogs.com/sunsky303/p/7731911.html

新建一个test测试文件夹,并在这个文件夹内新建一些文件:

vim hello.cpp

vim hello.h

vim usehello.cpp

vim usehello.h

1.编译动态链接库

gcc -o hello.so -fpic -shared  -I.   hello.cpp
ls
ldd hello.so

gcc -o usehello.so -fpic -shared  -I. -Wl,-rpath=/home/yzw/test  usehello.cpp  hello.so
ls
ldd usehello.so

切记共享库写在.cpp文件的后面,否则就会加载不上动态链接库

gcc -o main  -I. -Wl,-rpath=/home/yzw/test  main.cpp usehello.so
ls
ldd main

./main`

备注:

  1. -I 后面加头文件的路径, -I. 表示在当前的目录下搜索头文件
  2. -Wl,-rpath=/home/yzw/test 表示指定优先搜索的共享库地址,首先你的地址必须在/etc/ld.so.conf文件中,或者在/etc/ld.so.conf.ld目录下。
  3. 来自于链接一的补充说明:
    ldconfig命名与运行程序市有关,与编译时一点关系都没有,因此,在编译的时候依旧需要加上优先指定库路径,如: -Wl,-rpath=/home/yzw/test

原文地址:http://blog.51cto.com/12656963/2092089

时间: 2024-11-05 18:47:32

LInux中共享库的嵌套调用例子的相关文章

QT中共享库的生成与使用

一. 静态库的生成1. 测试目录: lib2. 源码文件名: mywindow.h, mywindow.cpp, 类MyWindow继承于QPushButton, 并将文字设置为"I'm in class MyWindow";3. 编写项目文件: mywindow.pro注意两点:TEMPLATE = libCONFIG += staticlib4. 生成Makefile:qmake5. 编译生成静态库libmywindow.amake 二. 静态库的使用1. 测试目录: test2.

Linux中Grep常用的15个例子【转】

转自:https://www.aliyun.com/jiaocheng/1390860.html?spm=5176.100033.1.9.6a1e41e8Pdjynm 摘要:Grep命令主要用于从文件中查找指定的字符串.首先建一个demo_file:$catdemo_fileTHISLINEISTHE1STUPPERCASELINEINTHISFILE.thislineisthe1stlowercaselineinthisfile.ThisLineHasAllItsFirstCharacterO

【原创】Linux下共享库嵌套依赖问题

问题场景: 动态库 librabbitmq_r.so 内部依赖动态库 libevent_core.so 和 libevent_pthreads.so : 可执行程序 sa 依赖动态库 librabbitmq_r.so ; 在链接生成 sa 的时候希望只指定 librabbitmq_r.so 而不指定 libevent_core.so 和 libevent_pthreads.so . 错误信息: ... g++ ../source/authorisecfg.o ../source/bmcinst.

Linux下共享库嵌套依赖问题 (转载)

转自:http://my.oschina.net/moooofly/blog/506466 问题场景: 动态库 librabbitmq_r.so 内部依赖动态库 libevent_core.so 和 libevent_pthreads.so : 可执行程序 sa 依赖动态库 librabbitmq_r.so ; 在链接生成 sa 的时候希望只指定 librabbitmq_r.so 而不指定 libevent_core.so 和 libevent_pthreads.so . 错误信息: ... g

linux管理共享库

Linux 运行的时候,是如何管理共享库(*.so)的?在 Linux 下面,共享库的寻找和加载是由 /lib/ld.so 实现的. ld.so 在标准路经(/lib, /usr/lib) 中寻找应用程序用到的共享库. 但是,如果需要用到的共享库在非标准路经,ld.so 怎么找到它呢? 目前,Linux 通用的做法是将非标准路经加入 /etc/ld.so.conf,然后运行 ldconfig 生成 /etc/ld.so.cache. ld.so 加载共享库的时候,会从 ld.so.cache 查

linux下共享库的注意点之-fpic

在编译共享库必须加上-fpic.这是为什么呢? 首先看一个简单的例子: #include <stdio.h> int fun1() { printf("fun1\n"); } 先不加-fpic的情况下生成库,反汇编查看fun1的机器码 0000044c <fun1>: 44c: 55 push %ebp 44d: 89 e5 mov %esp,%ebp 44f: 83 ec 18 sub $0x18,%esp 452: c7 04 24 b2 04 00 00

Linux中的库

一.基本概念 1.1.什么是库        在 windows 平台和 linux 平台下都大量存在着库. 本质上来说库是一种可执行的二进制代码(但不可以独立执行),可以被操作系统载入内存执行. 由于 windows 和 linux 的平台不同(主要是编译器.汇编器和连接器 的不同),因此二者库的二进制是不兼容的. 本文仅限于介绍 linux 下的库. 1.2. 库的种类 linux下的库有两种:静态库和共享库(动态库). 二者的不同点在于代码被载入的时刻不同: 静态库的代码在编译过程中已经被

/etc/ld.so.conf和/etc/ld.so.cache –linux动态共享库

可执行程序找不到要链接的动态共享库,这是Linux上面编译和运行程序很容易碰到的问题,接下来我们要探讨一下怎么设置程序寻找动态共享库的行为.Linux操作系统上面的动态共享库大致分为三类:1.操作系统级别的共享库和基础的系统工具库比方说libc.so, libz.so, libpthread.so等等,这些系统库会被放在/lib和/usr/lib目录下面,如果是64位操作系统,还会有/lib64和/usr /lib64目录.如果操作系统带有图形界面,那么还会有/usr/X11R6/lib目录,如

Linux动态共享库

Linux操作系统上面的动态共享库大致分为三类:   一.操作系统级别的共享库和基础的系统工具库 libc.so, libz.so, libpthread.so等等,这些系统库会被放在/lib和/usr/lib目录下面,如果是64位操作系统,还会有/lib64和/usr /lib64目录.如果操作系统带有图形界面,那么还会有/usr/X11R6/lib目录,如果是64位操作系统,还有/usr/X11R6 /lib64目录.此外还可能有其他特定Linux版本的系统库目录. 这些系统库文件的完整和版