如何通过 opam 安装 ZeroMQ
OCaml的多核心支持尚不完善,但是OCaml的单进程性能非常可观,为了能让OCaml充分使用 多核心机器的计算能力,就需要使用Master slave模型和队列模型进行分布式计算。这就不 可避免的使用Socket通讯了,而ZeroMQ是一个非常不错的Socket抽象库,支持消息队列,消 息路由等模式,因此选在在OCaml中使用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
我们只需要将我们需要的路径加入到这些环境变量中就可以了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#在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
就可以顺利安装OCaml的ZeroMQ组件库了。