linux 依赖 so文件,linux动态链接库so文件依赖关系理解

很多c程序在windows下是以dll形式展现的,在linux则是以so 形式展现的。

windows一般不会因为编译dll文件的编译器版本不同而出先dll文件不能执行。

linux下,不同版本内核的linux下编译的c程序,在其他版本的linux下就容易出现无法执行的问题。

主要原因:支持程序的内核相对于编译时的内核较高或者版本相对于编译时的内核较低。

如何查看动态链接库文件(so后缀的)是否能在当前linux系统下可用?

首先,要看他依赖的相关文件是否存在,查看命令:

ldd file.so

假如,想查看jnative的动态链接库在某个版本的linux下是否被支持,先切换到文件所在目录,命令:

ldd libJNativeCpp.so

若正常,显示如下:

libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x0069c000)

libm.so.6 => /lib/tls/libm.so.6 (0x00111000)

libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00562000)

libc.so.6 => /lib/tls/libc.so.6 (0x00134000)

/lib/ld-linux.so.2 (0x0097b000)

若不正常可能显示如下:

./libJNativeCpp.so: /lib/tls/libc.so.6: version `GLIBC_2.4' not found (required by ./JNativeCpp.so)

libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x0047e000)

libm.so.6 => /lib/tls/libm.so.6 (0x00111000)

libc.so.6 => /lib/tls/libc.so.6 (0x0056e000)

libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00c3d000)

/lib/ld-linux.so.2 (0x0097b000)

这里是那个有名的jni第三方类库的默认的lib,上边的错误信息显示就是说我们的libJNativeCpp.so是在2.4内核下编译的,当前内核版本不支持。

经过查看,我当前的linux版本的内核是2.6高于libJnativeCpp.so编译时的内核。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值