【本文谢绝转载,原文来自http://990487026.blog.51cto.com】
<大纲> linux开发基础 od -tc 查看文件所有字符 显示硬件信息: lshw apt-get操作: 软件包搜索:apt-cache search vim 显示软件包信息 apt-cache show vim 进程: who ps ps aux 作业号: ctrl + z 丢到后台,停止运行 fg 1 调到前台,开始运行 bg 2 调到后台,开始运行 kill 环境变量: env PATH finger 用户信息 安装vsftpd 安装 登陆 下载 上传 VIM 命令模式 vim分屏操作 调整屏幕尺寸 vim 进制切换 gcc gcc -I指定头文件的位置 gcc -DDEBUG 定义宏参数 nm 查看符号表 objdump反汇编 ldd 查看程序依赖哪些库 共享库简介 静态库实例 共享库实例
查看文件所有字符
2016-08-01_14:58:[email protected]://990487026.blog.51cto.com~/linux_c$ od -tc main.c 0000000 # i n c l u d e < s t d i o . 0000020 h > \n \n i n t m a i n ( v o i 0000040 d ) \n { \n \t p r i n t f ( " % d 0000060 \ n " , a d d ( 2 , 4 ) ) ; \n \t 0000100 p r i n t f ( " % d \ n " , d i 0000120 v ( 8 , 3 ) ) ; \n \t r e t u r n 0000140 0 ; \n } \n \n 0000147
apt-get操作
软件包搜索:$ apt-cache search vim
软件包信息:$ apt-cache show vim
解压到指定的文件路径:$ tar xf linux-4.6.tar.gz -C haha/
踢人下线
[email protected]://990487026.blog.51cto.com~$ ps PID TTY TIME CMD 3585 pts/0 00:00:00 bash 3899 pts/0 00:00:00 ps [email protected]://990487026.blog.51cto.com~$ who chunli pts/0 2016-07-27 02:19 (10.11.12.1) chunli pts/1 2016-07-27 02:47 (10.11.12.1) [email protected]://990487026.blog.51cto.com~$
列出所有进程:
[email protected]://990487026.blog.51cto.com~$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.4 33656 4076 ? Ss Jul26 0:02 /sbin/init root 2 0.0 0.0 0 0 ? S Jul26 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S Jul26 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< Jul26 0:00 [kworker/0:0H] root 7 0.0 0.0 0 0 ? S Jul26 0:04 [rcu_sched] root 8 0.0 0.0 0 0 ? S Jul26 0:00 [rcu_bh]
作业号:
ctrl + z 丢到后台,停止运行
fg 1调到前台,开始运行
bg 2调到后台,开始运行
kill
kill;
[email protected]://990487026.blog.51cto.com~$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX [email protected]://990487026.blog.51cto.com~$
环境变量:
[email protected]://990487026.blog.51cto.com~$ env XDG_SESSION_ID=2 TERM=xterm SHELL=/bin/bash SSH_CLIENT=10.11.12.1 8045 22 OLDPWD=/dev SSH_TTY=/dev/pts/0 USER=chunli LD_LIBRARY_PATH=:. MAIL=/var/mail/chunli PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games PWD=/home/chunli LANG=en_US.UTF-8 SHLVL=1 HOME=/home/chunli LANGUAGE=en_US:en LOGNAME=chunli SSH_CONNECTION=10.11.12.1 8045 10.11.12.4 22 XDG_RUNTIME_DIR=/run/user/1000 _=/usr/bin/env [email protected]://990487026.blog.51cto.com~$
添加用户:
[email protected]://990487026.blog.51cto.com~$ sudo useradd -s /bin/bash -g chunli -d /home/xioaming -m xiaoming
finger 用户信息
[email protected]://990487026.blog.51cto.com~$ finger chunli Login: chunli Name: chunli Directory: /home/chunli Shell: /bin/bash On since Wed Jul 27 02:24 (CST) on tty1 7 hours 56 minutes idle On since Wed Jul 27 02:19 (CST) on pts/0 from 10.11.12.1 7 seconds idle On since Wed Jul 27 02:47 (CST) on pts/1 from 10.11.12.1 7 hours 34 minutes idle No mail. No Plan. [email protected]://990487026.blog.51cto.com~$
安装vsftpd:
ubuntu14.04
[email protected]:~$ sudo apt-get install vsftpd [email protected]:~$ echo $? [email protected]:~$ sudo mkdir /home/ftp [email protected]:~$ sudo chmod 777 /home/ftp/ [email protected]:~$ vim /etc/vsftpd.conf listen=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key [email protected]:~$ sudo service vsftpd restart [email protected]:~$ netstat -tnlp tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN - 登陆:[email protected]:~$ ftp 10.11.12.4 Name (10.11.12.4:chunli): chunli ftp> ls drwxrwxr-x 2 1000 1000 4096 Jul 29 13:32 c++ 使用二进制传输 ftp> bin 200 Switching to Binary mode. 文件下载: ftp> ls -rw-rw-r-- 1 1000 1000 5 Jul 29 13:47 hello.txt ftp> get hello.txt 文件上传: ftp> put 123 ftp> ls -l rw-r--r-- 1 1000 1000 0 Jul 29 14:23 123 -rw-rw-r-- 1 1000 1000 60 Jul 29 14:22 ll quit,exit,bye结束 ftp缺点:不可以下载一个目录
VIM
命令模式: M: 光标移动到中间行 L: 光标移动到屏幕最后一行行首 G: 移动到指定行,行号 -G w: 向后一次移动一个字 b: 向前一次移动一个字 {: 按段移动,上移 }: 按段移动,下移 Ctr-d: 向下翻半屏 Ctr-u: 向上翻半屏 Ctr-f: 向下翻一屏 Ctr-b: 向上翻一屏 gg: 光标移动文件开头 G: 光标移动到文件末尾 gg=G:所有代码缩进 删除命令: x: 删除光标后一个字符,相当于 Del X: 删除光标前一个字符,相当于 Backspace dd: 删除光标所在行,n dd 删除指定的行数 D: 删除光标后本行所有内容,包含光标所在字符 d0: 删除光标前本行所有内容,不包含光标所在字符 dw: 删除光标开始位置的字,包含光标所在字符 撤销命令: u: 一步一步撤销 U: 一次性撤销当前行所作的所有操作 Ctr-r: 反撤销 重复命令: .: 重复上一次操作的命令 文本行移动: >>: 文本行右移 <<: 文本行左移 复制粘贴: yy: 复制当前行,n yy 复制 n 行 p: 在光标所在位置向下新开辟一行,粘贴 可视模式: v: 按字符移动,选中文本 V: 按行移动,选中文本可视模式可以配合 d, y, >>, << 实现对文本块的删除,复制,左右移动 替换操作: r: 替换当前字符 R: 替换当前行光标后的字符 查找命令: /: str查找 n: 下一个 N:上一个 vim分屏操作 分屏操作: sp: 上下分屏,后可跟文件名 vsp: 左右分屏,后可跟文件名 Ctr+w+w: 在多个窗口切换 启动分屏: 1.使用大写O参数进行垂直分屏 $ vim -On file1 file2 ... 2.使用小写o参数进行水平分屏 $ vim -on file1 file2 ... 注: n是数字,表示分屏的数量,n要大于等于文件个数 关闭分屏 1.关闭当前窗口 ctrl+w c 2.关闭当前窗口,如果只剩最后一个,则退出vim ctrl+w q 编辑中分屏 1.上下分割当前打开的文件 ctrl+w s 2.上下分割,并打开一个新的文件 :sp filename 3.左右分割当前打开的文件 ctrl+w v 4.左右分割,并打开一个新的文件 :vsp filename 分屏编辑中光标的移动 vi中的光标键是h,j,k,l,要在各个屏之间切换,只需要先按一下ctrl+w ctrl+w k 把光标移动到上边的屏 ctrl+w j 把光标移动到下边的屏 ctrl+w l 把光标移动到右边的屏 ctrl+w h 把光标移动到左边的屏 ctrl+w w 把光标移动到下一个的屏 移动分屏 1.向上移动 ctrl+w K 2.向下移动 ctrl+w J 3.向右移动 ctrl+w L 4.向左移动 ctrl+w H 屏幕尺寸 1.增加高度 ctrl+w + 2.减少高度 ctrl+w - 3.所有屏的高度一致 ctrl+w = 4.左加宽度 ctrl+w > 5.右加宽度 ctrl+w < 6.右增加n宽 (如:n=30) ctrl+w n < [实用] 光标fopen 按3 shift + k:查看函数的定义 ,相当于man 3 fopen vim 进制 :%!xxd 以16进制编辑 :%!xxd -r 回到正常模式编辑 vim ide ctag
查看gcc版本
[email protected]:~$ gcc -v gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) [email protected]:~$ 有些项目的开发需要指定版本的编译器
gcc -I指定头文件的位置:
[email protected]:~$ gcc -I/tmp/ main.c [email protected]:~$ cat main.c #include <stdio.h> #include "test.h" int main(void) { return 0; } [email protected]:~$ ll /tmp/ total 4 -rw-rw-r-- 1 chunli chunli 2 Jul 30 15:29 test.h [email protected]:~$ gcc -I/tmp/ main.c [email protected]:~$
gcc -DDEBUG 定义宏参数
[email protected]:~$ cat main.c #include <stdio.h> int main(void) { #ifdef DEBUG printf("hello \n"); #endif return 0; } [email protected]:~$ gcc -DDEBUG main.c [email protected]:~$ ./a.out hello [email protected]:~$
-E参数:预编译
[email protected]:~$ gcc -DDEBUG -E main.c -o main.i [email protected]:~$ cat main.i
nm 查看符号表
[email protected]:~$ nm a.out 0000000000601040 B __bss_start 0000000000601040 b completed.6973 0000000000601030 D __data_start 0000000000601030 W data_start 0000000000400470 t deregister_tm_clones 00000000004004e0 t __do_global_dtors_aux 0000000000600e18 t __do_global_dtors_aux_fini_array_entry 0000000000601038 D __dso_handle 0000000000600e28 d _DYNAMIC 0000000000601040 D _edata 0000000000601048 B _end 00000000004005c4 T _fini 0000000000400500 t frame_dummy 0000000000600e10 t __frame_dummy_init_array_entry 0000000000400700 r __FRAME_END__ 0000000000601000 d _GLOBAL_OFFSET_TABLE_ w __gmon_start__ 00000000004003e0 T _init 0000000000600e18 t __init_array_end 0000000000600e10 t __init_array_start 00000000004005d0 R _IO_stdin_used w _ITM_deregisterTMCloneTable w _ITM_registerTMCloneTable 0000000000600e20 d __JCR_END__ 0000000000600e20 d __JCR_LIST__ w _Jv_RegisterClasses 00000000004005c0 T __libc_csu_fini 0000000000400550 T __libc_csu_init U [email protected]@GLIBC_2.2.5 000000000040052d T main U [email protected]@GLIBC_2.2.5 00000000004004a0 t register_tm_clones 0000000000400440 T _start 0000000000601040 D __TMC_END__ [email protected]:~$
objdump反汇编
[email protected]:~$ objdump -dSsx a.out a.out: file format elf64-x86-64 a.out architecture: i386:x86-64, flags 0x00000112: EXEC_P, HAS_SYMS, D_PAGED start address 0x0000000000400440 Program Header: PHDR off 0x0000000000000040 vaddr 0x0000000000400040 paddr 0x0000000000400040 align 2**3 filesz 0x00000000000001f8 memsz 0x00000000000001f8 flags r-x INTERP off 0x0000000000000238 vaddr 0x0000000000400238 paddr 0x0000000000400238 align 2**0 filesz 0x000000000000001c memsz 0x000000000000001c flags r-- LOAD off 0x0000000000000000 vaddr 0x0000000000400000 paddr 0x0000000000400000 align 2**21 filesz 0x0000000000000704 memsz 0x0000000000000704 flags r-x LOAD off 0x0000000000000e10 vaddr 0x0000000000600e10 paddr 0x0000000000600e10 align 2**21 filesz 0x0000000000000230 memsz 0x0000000000000238 flags rw- DYNAMIC off 0x0000000000000e28 vaddr 0x0000000000600e28 paddr 0x0000000000600e28 align 2**3 filesz 0x00000000000001d0 memsz 0x00000000000001d0 flags rw- NOTE off 0x0000000000000254 vaddr 0x00000
ldd 查看程序依赖哪些库
[email protected]:~$ cat main.c #include <stdio.h> int main(void) { printf("hello \n"); return 0; } [email protected]:~$ gcc main.c && ./a.out hello [email protected]:~$ ldd ./a.out linux-vdso.so.1 => (0x00007ffc93dad000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6c61011000) /lib64/ld-linux-x86-64.so.2 (0x00007f6c613d6000) [email protected]:~$
共享库简介:
[email protected]:~$ cat add.c int add(int a,int b) { return a+b; } [email protected]:~$ gcc -fPIC -c add.c [email protected]:~$ ls -l -rw-rw-r-- 1 chunli chunli 38 Jul 30 16:51 add.c -rw-rw-r-- 1 chunli chunli 1232 Jul 30 16:51 add.o 后面可以接多个o文件 [email protected]:~$ gcc -shared -Wl,-soname,libmyadd.so.1 -o libmyadd.so.1.10 add.o [email protected]:~$ ll -rw-rw-r-- 1 chunli chunli 38 Jul 30 16:51 add.c -rw-rw-r-- 1 chunli chunli 1232 Jul 30 16:51 add.o -rwxrwxr-x 1 chunli chunli 7853 Jul 30 16:56 libmyadd.so.1.10* 写个主函数,来调用 [email protected]:~$ cat main.c #include <stdio.h> int main(void) { printf("%d\n",add(2,4)); return 0; } [email protected]:~$ gcc main.c libmyadd.so.1.10 运行时出错 [email protected]:~$ ./a.out ./a.out: error while loading shared libraries: libmyadd.so.1: cannot open shared object file: No such file or directory [email protected]:~$ 查看程序的依赖:可以看到not found [email protected]:~$ ldd ./a.out linux-vdso.so.1 => (0x00007ffe9c99c000) libmyadd.so.1 => not found libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9c35e4c000) /lib64/ld-linux-x86-64.so.2 (0x00007f9c36211000) [email protected]:~$ 【问题解决】修改ld.so.conf 追加一行动态库的路径 libmyadd.so.1.10 在 /home/chunli目录下 [email protected]:~$ cat /etc/ld.so.conf include /etc/ld.so.conf.d/*.conf /home/chunli 更新 ldconfig -v [email protected]:~$ sudo ldconfig -v 生成了soname,指向realname [email protected]:~$ ll lrwxrwxrwx 1 root root 16 Jul 30 17:22 libmyadd.so.1 -> libmyadd.so.1.10* -rwxrwxr-x 1 chunli chunli 7853 Jul 30 17:00 libmyadd.so.1.10* 再次执行 [email protected]:~$ ./a.out 6 linkname的制作,都指向realname [email protected]:~$ ln -s libmyadd.so.1.10 libadd.so [email protected]:~$ ll lrwxrwxrwx 1 chunli chunli 16 Jul 30 18:23 libadd.so -> libmyadd.so.1.10* lrwxrwxrwx 1 root root 16 Jul 30 17:22 libmyadd.so.1 -> libmyadd.so.1.10* -rwxrwxr-x 1 chunli chunli 7853 Jul 30 17:00 libmyadd.so.1.10*
静态库实例
源文件: 2016-08-01_14:06:13 [email protected]://990487026.blog.51cto.com~/linux_c$ cat src/add.c int add(int a,int b) { return a+b; } 2016-08-01_14:06:22 [email protected]://990487026.blog.51cto.com~/linux_c$ cat src/div.c int div(int a,int b) { if(b == 0) { return -1; } return a/b; } 2016-08-01_14:06:25 [email protected]://990487026.blog.51cto.com~/linux_c$ cat main.c #include <stdio.h> int main(void) { printf("%d\n",add(2,4)); printf("%d\n",div(8,3)); return 0; } 2016-08-01_14:04:57 [email protected]://990487026.blog.51cto.com~/linux_c$ tree . ├── lib ├── main.c └── src ├── add.c └── div.c src是源代码 lib是编译好的库 main.c是测试程序 编译库文件,与位置无关 2016-08-01_14:07:31 [email protected]://990487026.blog.51cto.com~/linux_c$ cd src/ 2016-08-01_14:07:33 [email protected]://990487026.blog.51cto.com~/linux_c/src$ gcc -c -fPIC *.c 2016-08-01_14:07:47 [email protected]://990487026.blog.51cto.com~/linux_c/src$ ls add.c add.o div.c div.o 做一个静态库: 2016-08-01_14:07:50 [email protected]://990487026.blog.51cto.com~/linux_c/src$ ar rcs libmycal.a *.o 2016-08-01_14:11:03 [email protected]://990487026.blog.51cto.com~/linux_c/src$ ls add.c add.o div.c div.o libmycal.a nm查看一下静态库里面有什么,只是把2个.o文件归档到一起 2016-08-01_14:11:38 [email protected]://990487026.blog.51cto.com~/linux_c/src$ nm libmycal.a add.o: 0000000000000000 T add div.o: 0000000000000000 T div 开始main的测试程序 2016-08-01_14:14:[email protected]://990487026.blog.51cto.com~/linux_c/src$ cd .. 2016-08-01_14:14:40 [email protected]://990487026.blog.51cto.com~/linux_c$ mv src/libmycal.a lib/ 2016-08-01_14:15:23 [email protected]://990487026.blog.51cto.com~/linux_c$ tree . ├── lib │ └── libmycal.a ├── main.c └── src ├── add.c ├── add.o ├── div.c └── div.o 静态库已经编译到程序之中,可以直接运行 优点:复制到任意linux,都可以运行 缺点:文件过大 编译运行: 2016-08-01_14:15:44 [email protected]://990487026.blog.51cto.com~/linux_c$ gcc main.c lib/libmycal.a 2016-08-01_14:15:52 [email protected]://990487026.blog.51cto.com~/linux_c$ ./a.out 6 2 2016-08-01_14:21:[email protected]://990487026.blog.51cto.com~/linux_c$ ll ./a.out -rwxrwxr-x 1 chunli chunli 8.5K Aug 1 14:15 ./a.out* 2016-08-01_14:21:[email protected]://990487026.blog.51cto.com~/linux_c$ size ./a.out text data bss dec hex filename 1438 560 8 2006 7d6 ./a.out 查看程序的依赖 2016-08-01_14:22:[email protected]://990487026.blog.51cto.com~/linux_c$ ldd ./a.out linux-vdso.so.1 => (0x00007ffd9439b000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd610550000) /lib64/ld-linux-x86-64.so.2 (0x00007fd610915000)
共享库实例
文件目录: 2016-08-01_14:30:[email protected]://990487026.blog.51cto.com~/linux_c$ tree . ├── lib ├── main.c └── src ├── add.c └── div.c 2016-08-01_14:06:13 [email protected]://990487026.blog.51cto.com~/linux_c$ cat src/add.c int add(int a,int b) { return a+b; } 2016-08-01_14:06:22 [email protected]://990487026.blog.51cto.com~/linux_c$ cat src/div.c int div(int a,int b) { if(b == 0) { return -1; } return a/b; } 2016-08-01_14:06:25 [email protected]://990487026.blog.51cto.com~/linux_c$ cat main.c #include <stdio.h> int main(void) { printf("%d\n",add(2,4)); printf("%d\n",div(8,3)); return 0; } 编译与位置不相关 2016-08-01_14:34:[email protected]://990487026.blog.51cto.com~/linux_c$ cd src/ 2016-08-01_14:35:[email protected]://990487026.blog.51cto.com~/linux_c/src$ gcc -c -fPIC *.c 2016-08-01_14:35:[email protected]://990487026.blog.51cto.com~/linux_c/src$ ls add.c add.o div.c div.o 搞一个共享库 2016-08-01_14:38:[email protected]://990487026.blog.51cto.com~/linux_c/src$ gcc -shared -Wl,-soname,libmycal.so.1 -o libmycal.so.1.10 *.o 2016-08-01_14:38:[email protected]://990487026.blog.51cto.com~/linux_c/src$ ls add.c add.o div.c div.o libmycal.so.1.10 2016-08-01_14:38:[email protected]://990487026.blog.51cto.com~/linux_c/src$ mv libmycal.so.1.10 ../lib/ 2016-08-01_14:40:[email protected]://990487026.blog.51cto.com~/linux_c/src$ cd .. 2016-08-01_14:40:[email protected]://990487026.blog.51cto.com~/linux_c$ tree . ├── lib │ └── libmycal.so.1.10 ├── main.c └── src ├── add.c ├── add.o ├── div.c └── div.o 编译通过,运行报错 2016-08-01_14:43:[email protected]://990487026.blog.51cto.com~/linux_c$ gcc -o app main.c lib/libmycal.so.1.10 2016-08-01_14:43:[email protected]://990487026.blog.51cto.com~/linux_c$ ls app lib main.c src 2016-08-01_14:43:[email protected]://990487026.blog.51cto.com~/linux_c$ ./app ./app: error while loading shared libraries: libmycal.so.1: cannot open shared object file: No such file or directory 2016-08-01_14:43:[email protected]://990487026.blog.51cto.com~/linux_c$ 查看依赖:libmycal.so.1 => not found 2016-08-01_14:43:[email protected]://990487026.blog.51cto.com~/linux_c$ ldd ./app linux-vdso.so.1 => (0x00007fffba765000) libmycal.so.1 => not found libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f19daf92000) /lib64/ld-linux-x86-64.so.2 (0x00007f19db357000) 解决方案:把库的路径搞到/etc/ld.so.conf里面 2016-08-01_14:46:[email protected]://990487026.blog.51cto.com~/linux_c$ cat /etc/ld.so.conf include /etc/ld.so.conf.d/*.conf /home/chunli/linux_c/lib 更新:根据realname自动生成soname 2016-08-01_14:47:[email protected]://990487026.blog.51cto.com~/linux_c$ sudo ldconfig -v 看看变化: 2016-08-01_14:48:[email protected]://990487026.blog.51cto.com~/linux_c$ tree . ├── app ├── lib │ ├── libmycal.so.1 -> libmycal.so.1.10 │ └── libmycal.so.1.10 ├── main.c └── src ├── add.c ├── add.o ├── div.c └── div.o 如果更新失败,重新更新 删除/etc/ld.so.cache 再查一下,找到了吧 2016-08-01_14:48:[email protected]://990487026.blog.51cto.com~/linux_c$ ldd ./app linux-vdso.so.1 => (0x00007ffccd709000) libmycal.so.1 => /home/chunli/linux_c/lib/libmycal.so.1 (0x00007ff302499000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff3020d4000) /lib64/ld-linux-x86-64.so.2 (0x00007ff30269b000) 运行:OK 2016-08-01_14:48:[email protected]://990487026.blog.51cto.com~/linux_c$ ./app 6 2 手动生成linkname 2016-08-01_14:55:[email protected]://990487026.blog.51cto.com~/linux_c/lib$ tree . ├── libmycal.so -> libmycal.so.1.10 ├── libmycal.so.1 -> libmycal.so.1.10 └── libmycal.so.1.10
时间: 2024-10-05 05:59:52