2018年5月
阿里图标库的使用方法
wordpress知更鸟主题LTS添加阅读时间
'xxx': error while loading shared libraries的解决方案
一、问题描述
运行程序时出现以下错误,原因是程序运行时需要的动态库找不到:
./app: error while loading shared libraries: libxxx.so: cannot open shared object file: No such file or directory
解决方案有以下三种。
二、解决方案
2.1 方案1
把需要的库文件复制到系统的默认库路径下:
> sudo cp libxxx.so /lib
Linux c中静态库和动态库的使用方法
一、静态库和动态库
静态库是指程序在编译阶段就把库文件嵌入到程序中的三方库,这种行为在程序运行前就已经决定了,程序在编译完成后不再依赖库文件。
动态库和静态库不一样,它是在程序运行期间才发生的调用行为,不会嵌入到程序,相对来说,链接动态库的二进制文件体积更小。
windows和linux平台下的静态/动态库后缀分别为lib dll
和.a .so
,其中linux中动态库的命名规则为:libxxx.so.x.y.z
,xxx表示库名,x是主版本号,y是此版本号,z是发行版本号。
GCC常用的编译参数
-l
:表明需要一起编译的库文件。-L
:添加库文件所在的目录,只针对静态库。-c
:生成目标文件*.o
。-o
:指定输出文件。
静态库的使用方法
库文件名字为libxxx.a
或者libxxx.so
,使用时通过-l
链接:
gcc -lxxx main.c
如果库文件不在/lib
, /usr/lib
或/usr/local/lib
三者中的任一个文件夹的话,要通过-L
选项指定库所在的目录,否则会报错:/usr/bin/ld: cannot find -lxxx
。
> make
gcc main.c -lfunc1 -o debug/app # 没有制定库所在路径报错
/usr/bin/ld: cannot find -lfunc1
collect2: error: ld returned 1 exit status
Makefile:9: recipe for target ''app'' failed
make: *** [app] Error 1
> vi Makefile # 修改Makefile添加-L选项
> make
gcc main.c -L. -lfunc1 -o debug/app # 编译成功
Makefile的编写方法
一、Makefile概述
一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。Makefile的基本语法规则为:
目标: 依赖
操作
例如我们要把一个main.c
编译成app
,这里目标是app
,源是main.c
,编译的命令为gcc main.c -o app
。那么它的Makefile为:
app: main.c
gcc main.c -o app
unix环境下的时间值
一、时间介绍
unix环境下一共有两种时间值:
- 日历时间(Calendar time):该值是自1970年1月1日00:00:00以来所经过的秒数累计值,也叫国际标准时间(UTC,早期的手册称UTC为格林尼治标准时间),这些时间值可用于记录文件最近一次的修时间等,是最常用到的时间。
- 进程时间(Process time):也被称作CPU时间,用来度量进程使用的中央处理器资源,它由时钟滴答(clock ticks)表示,每秒50、60或者100个时钟滴答。
通常当我们度量一个进程的执行时间时会包含三种时间属性:时钟时间、用户CPU时间和系统CPU时间。
时钟时间(wall clock time)指进程运行所花费的时间,也就是命令开始执行到结束的时间。它的值与系统中其他的进程数量有关,包括了其他进程所占用的时间和进程被阻塞时所花费的时间。
用户CPU时间是指进程执行用户指令所花费的时间,系统CPU时间则指进程在进行系统调用时占用的时间(例如当我们执行open
和write
等函数时)。用户CPU时间和系统CPU时间的和被称为CPU时间。
wordpress使用WP Mail SMTP插件发送系统邮件
pkg-config的用法
pkg-config
的作用是列出系统中库的基本信息,例如,查询pcre
库的相关信息:
$ pkg-config --libs libpcre2-8
-L/usr/local/pcre2-10.31/lib -lpcre2-8
常用选项为:
--list-all
:列出所有已安装的共享库。--cflags
:列出指定共享库的预处理和编译flag。--libs
:列出指定共享库的链接flag。
$ pkg-config --list-all # 列出所有的库地址
lua5.1-rrd Lua rrd - Lua rrd engine
tic tic - ncurses 6.0 add-on library
lua51-c++ Lua - Lua language engine
lua5.1-bitop Lua bitop - Lua bitop engine
ncurses ncurses - ncurses 6.0 library
lua5.2-bitop Lua bitop - Lua bitop engine
menu menu - ncurses 6.0 add-on library
python-3.5m Python - Python library
systemd systemd - systemd System and Service Manager
...
$ pkg-config --cflags --libs libpcre2-8 # 找出pcre库相关的文件信息
-I/usr/local/pcre2-10.31/include -L/usr/local/pcre2-10.31/lib -lpcre2-8