【移植】mongodb-c-driver交叉编译到ARM平台

简述目的

在之前的一篇博文中,已经安装好mongodb与在Ubuntu下运行,调试测试使用c API,现在需要移植到arm平台中,所以有一下笔记,希望对大家有帮助。

有任何错误或者问题希望可以相互交流,我的邮箱:[email protected]

建议在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。

 

发布了41 篇原创文章 · 获赞 54 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/sishuihuahua/article/details/70208865