首页 > 编程知识 正文

x86指令集一共多少条,ubuntu自带gcc吗

时间:2023-05-04 04:50:25 阅读:111966 作者:4656

在linux上,还有ls、rm、mv、cp等大家通用的命令,但我认为这些都不需要再说得更详细。 而且,也有只有开发者使用的命令。 作为程序员,我们需要理解,也需要熟练使用这样的命令。

有人总是说这些命令不重要,用的时候查就行了,这么荒谬的说法啊。 虽然能详细了解具体的使用方法,但至少要知道有ldd这种东西吧。 连液晶屏都不知道,你怎么知道液晶屏在做什么?

本文非常简单,但介绍了ldd命令。 啊,突然想起来了。 我有朋友。 她的名字是三个字,首字母正好是l、d、d。 有点意思。 在linux上,ldd是list、dynamic和dependencies的缩写,意思是枚举动态库依赖关系。 当然,也可以通过液晶屏--help或man液晶屏查看其使用方法。 那么,我们也来看看:

test.h的内容如下。

语音打印(; test.c的内容如下。

# include stdio.h # include ' test.h ' void print () printf(rainydaysn ); } main.c的内容如下。

#include 'test.h'int main () {print ); 返回0; }

进行一系列编译,然后使用ldd命令,可以执行以下操作:

[ taoge @ localhost learn _ ldd ] $ ls main.CT est.CT est.h [ taoge @ localhost learn _ ldd ] $ gcc-cmain.CT est.c [ TTT $ gcc-cmain.c $ gcc main.o test.o [ taoge @ localhost learn _ ldd ] $ LSA.out main.cmain.o test.CT est.htest.o a.out rainy days [ taoge @ localhost learn _ ldd ] $ [ taoge @ localhost learn _ ldd ] $ [ taoge @ localhost learn _ ldd ] $ a libc.so.6(0x0087e000 )/lib/Linux.SO.6(0x0087e000 ) ) lib/Linux.so main.c : ldd : warning 3360 youdong main.c ' notadynamicexecutablemain.o : ldd : warning : youdonothaveexecutionpermissionfor `./main.o ' notadynamicexecutabletest.c : ldd : warning : youdonothaveexecutionpermissionfor `./test.c ' notadynamicexecutabletest.h : ldd : warning : youdonothaveexecutionpermissionfor `./test.h ' ldd libc 4: test.h ' test.o : ldd 3360 warning 3360 youdonothaveexecutionpermission test.o ' notadynamicexecutable [ taoge @ localhost lond ]

让我们看看静态链接库的使用情况。

[ taoge @ localhost learn _ ldd ] $ ls main.CT est.CT est.h [ taoge @ localhost learn _ ldd ] $ gcc-CT est.c [ taoge @ lldd $ gcc main.c-l.- ltest [ taoge @ localhost learn _ ldd ] $ LSA.out libtest.amain.CT est.CT est.htest.o [ taoge @

calhost learn_ldd]$ [taoge@localhost learn_ldd]$ [taoge@localhost learn_ldd]$ ldd *a.out:linux-gate.so.1 => (0x00e7c000)libc.so.6 => /lib/libc.so.6 (0x0087e000)/lib/ld-linux.so.2 (0x00858000)libtest.a:ldd: warning: you do not have execution permission for `./libtest.a'not a dynamic executablemain.c:ldd: warning: you do not have execution permission for `./main.c'not a dynamic executabletest.c:ldd: warning: you do not have execution permission for `./test.c'not a dynamic executabletest.h:ldd: warning: you do not have execution permission for `./test.h'lddlibc4: cannot read header from `./test.h'test.o:ldd: warning: you do not have execution permission for `./test.o'not a dynamic executable[taoge@localhost learn_ldd]$

       这次用静态库, 结果还是差不多, 就没什么好说的了。

 

 

       我们继续看使用动态链接库时的情形:

 

[taoge@localhost learn_ldd]$ lsmain.c test.c test.h[taoge@localhost learn_ldd]$ gcc -c test.c[taoge@localhost learn_ldd]$ gcc -shared -fPIC -o libtest.so test.o[taoge@localhost learn_ldd]$ gcc main.c -L. -ltest[taoge@localhost learn_ldd]$ lsa.out libtest.so main.c test.c test.h test.o[taoge@localhost learn_ldd]$ ./a.out ./a.out: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory[taoge@localhost learn_ldd]$ [taoge@localhost learn_ldd]$ [taoge@localhost learn_ldd]$ [taoge@localhost learn_ldd]$ ldd *a.out:linux-gate.so.1 => (0x00f3d000)libtest.so => not foundlibc.so.6 => /lib/libc.so.6 (0x0087e000)/lib/ld-linux.so.2 (0x00858000)libtest.so:linux-gate.so.1 => (0x0031d000)libc.so.6 => /lib/libc.so.6 (0x00110000)/lib/ld-linux.so.2 (0x00858000)main.c:ldd: warning: you do not have execution permission for `./main.c'not a dynamic executabletest.c:ldd: warning: you do not have execution permission for `./test.c'not a dynamic executabletest.h:ldd: warning: you do not have execution permission for `./test.h'lddlibc4: cannot read header from `./test.h'test.o:ldd: warning: you do not have execution permission for `./test.o'not a dynamic executable[taoge@localhost learn_ldd]$ [taoge@localhost learn_ldd]$ su rootPassword: [root@localhost learn_ldd]# cp libtest.so /usr/lib/[root@localhost learn_ldd]# ./a.out rainy days[root@localhost learn_ldd]# exitexit[taoge@localhost learn_ldd]$ ./a.out rainy days[taoge@localhost learn_ldd]$[taoge@localhost learn_ldd]$[taoge@localhost learn_ldd]$[taoge@localhost learn_ldd]$ ldd a.out linux-gate.so.1 => (0x00510000)libtest.so => /usr/libtest.so (0x00fe3000)libc.so.6 => /lib/libc.so.6 (0x0087e000)/lib/ld-linux.so.2 (0x00858000)[taoge@localhost learn_ldd]$

        首先, 我们可以看到, a.out依赖于libtest.so这个库, 但是, 结果是not found, 找不到。 为什么呢? 因为在/usr/lib下面没有libtest.so, 后来, 我把libtest.so拷贝过去(需要root权限), 就OK了。 另外, 我们也应该看到, libtest.so的依赖库也是可以通过ldd命令找到的。

 

         当然, 如果不想自己写程序, 但想试一下ldd命令, 那也可以, 直接如下:

 

[taoge@localhost learn_ldd]$ ldd /发嗲的芹菜/lslinux-gate.so.1 => (0x0052b000)libselinux.so.1 => /lib/libselinux.so.1 (0x00b52000)librt.so.1 => /lib/librt.so.1 (0x00a5c000)libcap.so.2 => /lib/libcap.so.2 (0x0489c000)libacl.so.1 => /lib/libacl.so.1 (0x048c9000)libc.so.6 => /lib/libc.so.6 (0x0087e000)libdl.so.2 => /lib/libdl.so.2 (0x00a0c000)/lib/ld-linux.so.2 (0x00858000)libpthread.so.0 => /lib/libpthread.so.0 (0x00a13000)libattr.so.1 => /lib/libattr.so.1 (0x04d99000)[taoge@localhost learn_ldd]$ ldd /发嗲的芹菜/mvlinux-gate.so.1 => (0x00944000)libselinux.so.1 => /lib/libselinux.so.1 (0x00b52000)librt.so.1 => /lib/librt.so.1 (0x00a5c000)libacl.so.1 => /lib/libacl.so.1 (0x048c9000)libattr.so.1 => /lib/libattr.so.1 (0x04d99000)libc.so.6 => /lib/libc.so.6 (0x00110000)libdl.so.2 => /lib/libdl.so.2 (0x00a0c000)/lib/ld-linux.so.2 (0x00858000)libpthread.so.0 => /lib/libpthread.so.0 (0x00a13000)[taoge@localhost learn_ldd]$

 

 

 

        在实际linux开发与调试中, 要经常查看动态库依赖关系, ldd用得还是比较多的, 特别是出现故障的时候。OK, ldd命令就简单介绍到这里了, 虽然简单, 但很实用, 故不可不知。

 

 

        好了, 今天也写了不少文章了, 就此搁笔。 收拾一下, 看看书, 早点休息, 迎接明天的周一。

 

 

 

 

 

 

 

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。