成功在openshift上编译使用json-c

话说openshift真是一个好东西,有时候我们甚至可以把它当作一个vps来用,但是它却并不是真的vps,我们无法在上面“安装”自己想要的东西(官方提供的可安装组件除外),比如我想在openshift中写一个网络应用,该应用中数据涉及到json数据,那么我想要找一个库解析json数据,但openshift默认中是没有提供json解析的库的(说明一下,我所说的是c语言库),那么为了实现在openshift上使用json的c语言解析库,我们需要自己手动去安装,我选择的是json-c这个库,但是在我编译安装的时候却出现了一堆问题,下面把我遇到的问题说出来,并在这里作个记录,或许可以给其它想要在openshift中想要使用c语言解析json数据的朋友一个参考。

因为我们无法使用包管理器去安装json-c,所以我们必需要自己去下载源代码然后手动编译,这里一个非常烦人的问题就是依赖的问题了,json-c本身还好说,但我们在编译的时候需要使用libtool,而这个东西openshift中默认是没有的,这就是大麻烦。

所以我们不仅需要下载json-c的源码,还需要下载libtool的源码并编译,但我发现在编译libtool的过程中又出现了新的依赖,那就是makeinfo,makeinfo在包texinfo中,我们需要下载texinfo源码编译,然后将makeinfo文件复制出来,但编译texinfo又有新的依赖。。。。。。。。。。

不过这个依赖还好,为什么呢,因为我发现在这个依赖出错的时候makeinfo这个可执行文件已经生成了,其实我们需要的只是makeinfo这个可执行文件不是吗,没错,事情并没有那么糟糕,希望已经出现了,现在我们从编译libtool开始。

从github中找到libtool的代码,具体链接我就不给了,大家自己去找,然后clone回到本地。(当然得是一个我们有权限的目录下)
执行./configure
此处应该是顺利完成
然后我们make
此时出现问题了
你会发现类型这样的提示
aclocal-1.13: command not found
没关系,aclocal是有的,只不过不是aclocal-1.13而已,怎么办,使用vim打开Makefile文件,找到aclocal-1.13这个地方,将aclocal-1.13修改为aclocal即可
然后我们再make
问题再次出现
这次是automake-1.13: command not found
与上面相同的处理方法,使用vim打开Makefile文件然后找到automake-1.13并将其替换为automake即可
再make
哎,问题又出现了,为何问题总是那么多,好吧我们看看这次是怎么回事
这次是makeinfo: command not found
还记得前面说的吗,你是否已经编译texinfo了呢?你是否遇到了需要help2man的错误呢?你是否已经在makeinfo文件中找到makeinfo可执行文件了呢?是的,没错,就是这个可执行文件,现在让我们把它复制到当前目录下(哪里是当前目录,就是你编译libtool的Makefile所在目录),然后和上面一个情况,我们使用vim打开Makefile,然后找到makeinfo并把它修改为./makeinfo
现在我们再次make
问题又出现了,问题又出现了!!!!!!!!
help2man: command not found
哎,好吧,我们还是乖乖地去github上找help2man的源代码吧,躲得过初一,却终究躲不过十五。。。。。。
编译help2man很顺利,终于有一个可以顺利地完成了,我感觉这个世界太美好了。。。。。。
不过编译完help2man后我傻眼了,原来它只是个perl脚本而已(怪不得编译如此顺利),在这里我干脆把这个perl脚本贴出来吧

现在把这个该死的help2man复制到libtool目录下,如果你是复制的我贴出来的脚本,注意给它加x权限哦。
接着就是老情节了,使用vim打开Makefile文件,打开help2man然后将其替换为./help2man
再次make
这次终于成功了,内牛满面啊。。。。。。。
现在我们可以从github中下载json-c的源代码了,什么你已经clone回来了,好吧,当我没说。。。。。

现在第一步要做的就是先在一个我们有权限的目录下创建一个新目录,我们叫libjson-c好了,这个目录用来安装我们的json-c库,但我们不要将json-c的源代码下载到这个目录。
然后我们进行到json-c的源代码目录下执行
./autogen.sh
第一个错误出来了
error: possibly undefined macro: AM_PROG_LIBTOOL
不过没关系(暂时)因为当前目录下已经有configure这个文件了
./configure –prefix=你创建的那个libjson-c文件的绝对路径
提示没有找到install.sh
没关系,我们再执行一遍./autogen.sh
错误依旧,不过可以看到已经生成install.sh了,哈哈
然后再执行上面的./configure命令
错误再次出现,我们已经习以为常了,这次是
config.status: error: cannot find input file: Makefile.in
可不得了了,这下怎么办,我来告诉你,是有办法的,什么办法?在本地,对你没看错是本地而不是openshift上,我们同样下载json-c的源代码并执行./autogen.sh,如果在你本地出现依赖问题我想解决就很容易了,只需要使用包管理器安装一下依赖就可以解决了,一般你应该不会遇到依赖问题(我只是说一般)。

我们的目标是什么,当然不是没有蛀牙,我们的目标是复制Makefile.in这个文件,在你在本地执行完./autogen.sh后你会发现一个Makefile.in文件,现在我把它贴出来

我们把它复制到openshift的json-c目录下,然后再次执行
./configure –prefix=你创建的libjson-c文件的绝对路径
这次终于没有提示错误了,似乎一切都已经完成了,但请相信,这绝对是假象,虽然已经有了Makefile文件
现在是执行make的时候了
果然,就出现了
LIBTOOL@: Command not found
还记得我们有什么东西没有用吗?对,之前我们千辛万苦编译的libtool现在是时候用了,什么你已经忘记这茬,给我到厕所面壁去!!!!
去libtool目录下将我们编译的libtool可执行文件复制到json-c目录下
然后我们修改Makefile文件
打开Makefile文件,我不管你是偷也好,抢也罢,总之找到LIBTOOL = @LIBTOOL@这行
并将其修改为LIBTOOL = ./libtool
老手段了不是吗
再次make

你挑着担,我牵着马~,我们终于成功了,现在,对就是现在
make install
去我们创建的libjson-c文件看看吧,我们终于成功了。

至于怎么用,我就不多说了,大家自己找gcc文档琢磨去。

–阅读次数(86)

发表评论

电子邮件地址不会被公开。

*