文档章节

linux环境指定动态链接库路径

哔u哔u
 哔u哔u
发布于 2017/07/17 19:53
字数 559
阅读 85
收藏 0

linux环境指定动态链接库路径

网站:链接

文章已经迁移:链接

创建一个动态链接库

gcc -shared -fpic <x1.o x2.o x3.o> -o libqazwsx.so

这条命令将x1.o x2.0 x3.o三个文件打包成一个动态链接库文件libqazwsx.so

链接这个动态链接库,并放在可执行文件目录下,使可执行文件执行时能找到这个库

你可以使用 ldd <可执行文件> 看看它所链接的动态库

gcc test.o -o test -Wl,-rpath,./ -L./ -lqazwsx 

这个是文件目录

.--test
|
|-------test.c
|-------x1.c 
|-------x2.c
|-------x3.c
|
|-------test.o
|-------x1.o
|-------x2.o
|-------x3.o
|
|-------libqazwsx.so


解释一下命令

test.o -o test将test.o与动态库链接并输出可执行文件test

-Wl,-rpath,./告诉链接器,test执行时在./下找动态库

-L./ -lqazwsx 告诉链接器,链接时在./下找库

给出代码

x1.c

#include <stdio.h>

void print_x1 (void) {
    printf("I am x1.o\n");
}

x2.c

#include <stdio.h>

void print_x2 (void) {
    printf("I am x2.o\n");
}

x3.c

#include <stdio.h>

void print_x3 (void) {
    printf("I am x3.o\n");
}

test.c

#include <stdio.h>

extern void print_x1 (void);
extern void print_x2 (void);
extern void print_x3 (void);

int main (void) {
    print_x1();
    print_x2();
    print_x3();
    printf("I am main function\n");
    return 0;
}

完整的编译指令

gcc -c x1.c
gcc -c x2.c
gcc -c x3.c
gcc -c test.c

gcc -shared -fpic x1.o x2.o x3.o -o libqazwsx.so

gcc test.o -o test -Wl,-rpath,./ -L./ -lqazwsx

下面看一下测试(截图上传我不太会玩,复制粘贴好了)

# ??? @ ??? in ~/workspace/cpp [19:18:35] 
$ ./test 
I am x1.o
I am x2.o
I am x3.o
I am main function

# ??? @ ??? in ~/workspace/cpp [19:18:39] 
$ ldd test 
	linux-vdso.so.1 (0x00007fff755fd000)
	libqazwsx.so => ./libqazwsx.so (0x00007f9708264000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9707ea2000)
	/lib64/ld-linux-x86-64.so.2 (0x0000564acd3d3000)

# ??? @ ??? in ~/workspace/cpp [19:22:57] 
$ rm libqazwsx.so 
rm:是否删除普通文件 'libqazwsx.so'?y

# ??? @ ??? in ~/workspace/cpp [19:23:04] 
$ ./test 
./test: error while loading shared libraries: libqazwsx.so: cannot open shared object file: No such file or directory

# ??? @ ??? in ~/workspace/cpp [19:23:07] C:127
$ ldd test
	linux-vdso.so.1 (0x00007ffda6fdb000)
	libqazwsx.so => not found
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f702f741000)
	/lib64/ld-linux-x86-64.so.2 (0x000055c80d664000)

© 著作权归作者所有

上一篇: 发点牢骚
哔u哔u
粉丝 2
博文 9
码字总数 5916
作品 0
阜阳
程序员
私信 提问
Linux下的动态链接库.so文件的使用

参考文献: http://blog.csdn.net/jenshy/article/details/674621 1 简介 大家都知道,在WINDOWS系统中有很多的动态链接库(以.DLL为后缀的文件,DLL即Dynamic Link Library)。这种动态链接库,...

长平狐
2013/03/19
126
0
gcc指定头文件路径及动态链接库路径

gcc指定头文件路径及动态链接库路径 本文详细介绍了linux 下gcc头文件指定方法,以及搜索路径顺序的问题。另外,还总结了,gcc动态链接的方法以及路径指定,同样也讨论了搜索路径的顺序问题。...

长平狐
2013/06/17
12.4K
0
Linux下so动态库查看与运行时搜索路径的设置

ldd命令 linux 下可以使用ldd查看可执行文件所需要的动态链接库(*.so)。 注:下文用so代替动态链接库文件。 // 举个例子~$ ldd /bin/ls 如果ldd命令没有找到对应的共享库文件和其具体位置?...

chenyulancn
2018/04/24
0
0
怎样在 1 秒内启动 Linux

尽可能快的启动系统,对于自动化设备是非常重要的。系统能够在用户无法感知的时间内启动,也就意味着在不需要工作时,可以完全切断电源,而不是挂起 进入休眠状态。本文基于Atmel AT91系列片...

oschina
2015/12/04
11.5K
29
关于Linux静态和动态链接库的创建及使用

和Windows系统一样Linux也有静态/动态链接库,下面介绍创建和使用方法: 假设有下面几个文件: 头文件String.h,声明相关函数原形,内容如下: Strlen.c:函数Strlen的实现,获取给定字符串的...

zt371
2009/05/08
608
0

没有更多内容

加载失败,请刷新页面

加载更多

搭建高可用MongoDB集群(分片)

搭建高可用MongoDB集群(分片) MongoDB基础请参考:https://blog.51cto.com/kaliarch/2044423 MongoDB(replica set)请参考:https://blog.51cto.com/kaliarch/2044618 一、概述 1.1 背景 ......

linjin200
19分钟前
4
0
CDH6.0.1集成tez-0.9.1计算引擎

参考文章: https://www.jianshu.com/p/9fb9f32e1f0f https://www.baidu.com/link?url=OgpwasnZi7H1dySN2T111sseEWDBaCCTC3DFV61G7756YbrkJCA8Y3UFaueyqnfN&wd=&eqid=daeb8b3500049cf3000000......

Sheav
21分钟前
4
0
Vue内置指令的使用

v-model(数据绑定) v-model常用于表单数据的双向绑定,它本质上是一个语法糖。它主要的有两种应用: 在文本框、多行文本、input的下拉框、单选按钮、复选框中的应用 <div id="app"> ...

凌兮洛
22分钟前
5
0
外部来源应用检查-烦死了,终于找到解决设置了

Android 连接usb调试应用的时候: 华为关闭方法:1、设置-安全-更多安全设置,关掉外部来源应用检查。2、设置-系统-开发人员选项-关闭“监控ADB安装应用” 不知道OPPO 怎么关闭的?...

QGlaunch
23分钟前
4
0
6个K8s日志系统建设中的典型问题,你遇到过几个?

作者 | 元乙 阿里云日志服务数据采集客户端负责人,目前采集客户端 logtail 在集团百万规模部署,每天采集上万应用数 PB 数据,经历多次双 11、双 12 考验。 导读:随着 K8s 不断更新迭代,使...

阿里云官方博客
25分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部