简述目的
在之前的一篇博文中,已经安装好mongodb与在Ubuntu下运行,调试测试使用c API,现在需要移植到arm平台中,所以有一下笔记,希望对大家有帮助。
有任何错误或者问题希望可以相互交流,我的邮箱:weizhenhua94@163.com
建议在ARM中编译,就可以避免很多问题。
ARM需要安装:gcc g++ 可以使用apt-get安装
具体步骤可以参照在Ubuntu中的编译方式进行。
1. 编译mongodb,得到mongod与 mongo两个文件。
(这个方法没有试过,记得老大给我的这两个没有strip过是非常大的,两个文件差不多500多M,strip之后20兆左右)
2. 编译mongoc-c-driver
编译后注意查看以下文件:
a. /usr/local/include/下的两个文件:
libbson-1.0 libmongoc-1.0
b. mongo-c-driver-1.6.2/.libs/下的全部库文件
c. mongo-c-driver-1.6.2/src/libbson/.libs/下的全部库文件
如果没有的话就注意看编译的时候是否报错。
将以上文件放到Ubuntu中,修改Makefile库路径,就可以进行交叉编译。
附上Makefile:
SRCS=$(wildcard *.c)
OBJECTS=$(patsubst %.c,%.o,$(SRCS))
DEST=main
CC=arm-linux-gcc
#MYLIBS=-lmongoc-1.0 -lbson-1.0
MYLIBS=-L /home/wzh/workspace/mongo-c-driver-1.6.2/.libs -lmongoc-1.0 \
-L /home/wzh/workspace/mongo-c-driver-1.6.2/src/libbson/.libs/ -lbson-1.0
MYINCLUDEPATH= -I/usr/local/include/libmongoc-1.0 -I/usr/local/include/libbson-1.0/
$(DEST):$(OBJECTS)
$(CC) -o $@ $^ $(MYLIBS)
%.o:%.c
$(CC) -c -o $@ $^ $(MYINCLUDEPATH)
.PHONY:clean
clean:
rm -f *.o $(DEST) *~
另外尝试过的方法:
打算再Ubuntu这下交叉编译mongo-c-driver,但是没有成功。
./confirgure ----》ok
想把Makefile中的编译器都变成arm-linux-gcc arm-linux-g++
make-----》失败,报错。
尝试过几次,查看官方文档支持的平台:
参考链接:http://mongoc.org/libmongoc/current/installing.html
报错处理:
1. ARM平台上运行mongod和mongo出现段错误(Segmentation Fault)
a. 文件格式错误,使用:file命令查看。
readelf -dh mongod 查看运行依赖的库。
b. 文件上传时错误,特别是使用tftp,注意一定要使用二进制传输,bin
c. 可能缺少一些运行的依赖库
2. 运行有输出:大概有个字眼 --dbpath的,说明没有指定数据库路径。需要在运行的时候加上一个参数--dbpath=/data/db(自己定义)
如果还是出现问题,进到/data/db/下,将 ***.lock 文件删除,这是最简单的方法,或者是在运行momgod时添加参数 --repair,然后再运行mongod。