由于项目要用到husky的python版,pyhusky。所以要在本机运行husky。不得不说,c++的项目的可移植性和兼容性真的差java好几条街,所以编译这个看起来简单,但实操坑非常多。

坑1 —— zeromq

我很早以前就在mac上通过brew装好了zeromq,这次在编译husky的时候还报了找不到。最后发现homebrew安装的zmq只是一个底层的c版本,而不是合适版本。这里我只好手动下载了libzmq和cppzmq。clone下来后大概流程就是:

  1. mkdir build & cd build
  2. make ..
  3. make -j4
  4. make install

可以说是build一个项目最典型的操作了。刚开始不理解学长讲的要把hpp放在系统的include里,后来了解了一下原来cpp会把自己的一些hpp文件(类似快捷方式)放在/usr/local/include文件目录下,其他proj就可以去调用了。而make install里面集成了这一步。

坑2 —— libhdfs3

这个库是cpp用来连接hdfs的,但放弃维护了,所以只能找别人的,这里我找到了一个可用的

1
2
3
4
5
git clone git@github.com:ContinuumIO/libhdfs3-downstream.git
mkdir build & cd build
../bootstrap --prefix=/usr/local --dependency=$(brew --prefix openssl)
make
make install

这个需要提前装好gtest和gmock,就要去下载gtest和gmock,还是一样的build

坑3 —— build完Master依然不存在

在make master之后,应该出现Master应用程序,但我的程序里没出现。后来才知道因为mac的默认文件格式是不支持大小写敏感的,所以会有问题。这样我需要去改master下build的CMakeList.txt,如下:

1
2
3
4
5
# MasterHusky
add_executable(MasterHusky master.cpp ${master_plugins})
target_link_libraries(MasterHusky ${husky})
target_link_libraries(MasterHusky ${EXTERNAL_LIB})
set_property(TARGET MasterHusky PROPERTY CXX_STANDARD 14)

原来这里的MasterHusky叫Master,与build出的master文件冲突,所以要将它改成MasterHusky的名字,下面相应的地方都要改,然后再重新cmake就可以了。

坑4 —— Daemon无法执行

刚开始不知道要跑起来master以后再跑daemon,daemon也是build出来的,但刚开始不能跑,我需要装好libhdfs3以后,先运行master,再运行daemon(master不能停顿太久,因为可能挂掉了)

坑5 —— bindings路径问题

这个是最大的一个坑,我需要把husky目录下的bindings放在自己执行./Daemon和./Master的地方才可以!!!

例如我是直接在release里执行的,就需要把bindings文件夹和crawler下的hcrawl都放在release目录下!