构建开源项目常用cmake命令
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/zmq-4.3.2 -DCMAKE_BUILD_TYPE=Debug ..
-DCMAKE_INSTALL_PREFIX //指定项目安装目录
-DCMAKE_BUILD_TYPE //指定项目构建类型为Debug或Release
make install后才会安装到指定目录
直接使用 gcc编译
gcc -g -Wall -fPIC -I /usr/local/zmq-4.3.2/include/ -L /usr/local/zmq-4.3.2/lib64/ -lzmq hwclient.c -o hwclient
其中:
- -Wall 开启所有警告
- -fPIC 编译动态库时,产生位置无关代码
- -I 指定头文件目录
- -L 指定库文件目录
- -l 链接库,不需要前缀lib和后缀.a
错误./hwclient: error while loading shared libraries: libzmq.so.5: cannot open shared object file: No such file or directory
原因是没有找到链接库libzmq.so,相当于VS运行程序时没有.dll文件。
解决方法:
- 临时:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/zmq-4.3.2/lib64/
- 永久,有root权限:
echo /usr/local/zmq-4.3.2/lib64/ >> /etc/ld.so.conf.d/zmq.conf
ldconfig -v - 3.永久,无root权限:
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/zmq-4.3.2/lib64/' >> ~/.bash_profile
source ~/.bash_profile
方法1只适合当前shell临时使用。方法3只对当前用户有效。
LD_LIBRARY_PATH:指定链接库目录,相当gcc中的-L
ldconfig:会对ld.so.conf中的库创建链接。
方法3也是设置LD_LIBRARY_PATH,只不过会写到用户的配置文件。
source会在当前shell执行脚本
Linux设置环境变量
一、按照生命周期来分,Linux环境变量可以分为两类:
1、永久的:需要用户修改相关的配置文件,变量永久生效。
2、临时的:用户利用export命令,在当前终端下声明环境变量,关闭Shell终端失效。
二、按照作用域来分,Linux环境变量可以分为:
1、系统环境变量:系统环境变量对该系统中所有用户都有效。
2、用户环境变量:顾名思义,这种类型的环境变量只对特定的用户有效。
1. 在/etc/profile
文件中添加变量(对所有用户有效,永久)
vim /etc/profile
export PATH=$PATH:/usr/local/zmq-4.3.2/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/zmq-4.3.2/lib64
source /etc/profile
2. 在用户目录下的.bash_profile文件中增加变量(对当前用户有效,永久)
vim ~/.bash_profile
export PATH=$PATH:/usr/local/zmq-4.3.2/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/zmq-4.3.2/lib64
source ~/.bash_profile
3.直接运行export命令定义变量(对当前用户有效,临时)
简单来说,“登录shell”执行的startup文件为~/.bash_profile,而“非登陆shell”执行的startup文件为~/.bashrc。
当报错找不到某个.so库的时候,就要设置LD_LIBRARY_PATH,当找不到可执行文件的时候就设置PATH。
永久配置库路径
方法1
#!/bin/bash
ldpath=`pwd`
echo $ldpath >> /etc/ld.so.conf.d/test.conf
ldconfig -v
方法2
vim /etc/profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/zmq-4.3.2/lib64
source /etc/profile
两种方法都需要root权限。