Tech Talk 让技术发出声音
RSS

如何通过 opam 安装 ZeroMQ

起因

个人最近在学习OCaml和使用ZeroMQ,但是在我的OpenBSD上搞了好久,就是无法通过opam安装ZeroMQ的绑定。

发现问题

通过观察用户目录下.opam/system/build/可以发现,ZeroMQ的绑定依赖conf-zmq。而conf-zmq只是尝试编译一个文件test.c。在编译该文件的时候,使用的命令是gcc test.c -lzmq。通过查看test.c其中包含头文件的方式为#include<zmq.h>。根据gcc的参考文件,在Unix上会在下面这些文件夹中寻找头文件:

/usr/local/include
/usr/lib/gcc-lib/target/version/include
/usr/target/include
/usr/include

但是当我用gcc -v test.c -lzmq的时候,却发现只有:

/usr/include

解决方式

gcc在编译的时候,会使用几个标准的环境变量:

C_INCLUDE_PATH, CPATH, CPLUS_INCLUDE_PATH, DEPENDENCIES_OUTPUT,
OBJC_INCLUDE_PATH, SUNPRO_DEPENDENCIES

我们只需要将我们需要的路径加入到这些环境变量中就可以了

#在PATH中找到可执行文件程序的路径。
export PATH =$PATH:$HOME/bin
#gcc找到头文件的路径
C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/include/:/usr/local/include/zmq
export C_INCLUDE_PATH
#g++找到头文件的路径
CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/include/:/usr/local/include/zmq
export CPLUS_INCLUDE_PATH
#找到动态链接库的路径
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export LD_LIBRARY_PATH
#找到静态库的路径
LIBRARY_PATH=$LIBRARY_PATH:/usr/local/lib
export LIBRARY_PATH

接着我们只要重新执行

opam install zmq