Ubuntu14.4下,交叉编译获取libcarlifevechicle.so和libprotobuf.so后要怎么“拷贝到车机系统的交叉编译环境中,并设置好编译和链接路径,同车机端CarLife项目一起进行交叉编译。”。文档的这段没看懂。直接将上面两个动态库push进/system/lib中执行测试程序libtest,出现错误如下:
./libtest
CANNOT LINK EXECUTABLE: could not load library "libcarlifevehicle.so" needed by "./libtest"; caused by cannot locate symbol "_ZN6google8protobuf2io16CodedInputStreamD1Ev" referenced by "libcarlifevehicle.so"...该怎么解决呀,困扰了好多天~
./libtest
CANNOT LINK EXECUTABLE: could not load library "libcarlifevehicle.so" needed by "./libtest"; caused by cannot locate symbol "_ZN6google8protobuf2io16CodedInputStreamD1Ev" referenced by "libcarlifevehicle.so"...该怎么解决呀,困扰了好多天~
如下是我的Makefile文件,将生成libcarlifevehicle.so和libtest。libprotobuf.so生成在另外的路径。将生成的动态库push进安卓手机system/lib里,测试程序push到system/bin里进行运行,如何设置LD_LIBRARY_PATH路径。Ubuntu里知道可以再/etc/profile里进行添加,如何在android中设置LD_LIBRARY_PATH.
谢谢了,我是个新手,还请多多赐教~
TOPDIR:=$(shell pwd)
export TOPDIRCROSS_COMPILE=arm-linux-androideabi-
LD=$(CROSS_COMPILE)ld
CC=$(CROSS_COMPILE)g++CP=cpexport LD CC CFLAGS:=-g -Wall -W -fPIC
CFLAGS+=-I protobuf/cc/include
CFLAGS+=-I $(TOPDIR)/include
CFLAGS+=-I $(TOPDIR)/protobuf/cc/include
CFLAGS+=-I /usr/local/include
CFLAGS+=-I /usr/local/include/google/protobuf
CFLAGS+=-I /usr/local/include/google/protobuf/io
CFLAGS+=-I /usr/local/include/google/protobuf/stubs#LFLAGS:=-fPIC -shared
LFLAGS+=-L/usr/local/lib -lprotobufexport CFLAGS LFLAGSOBJDIR=obj#obj-y+=CarLifeLibTest.o
obj-y+=core/
obj-y+=libwrapper/
obj-y+=modules/
obj-y+=protobuf/
obj-y+=utility/TARGET-LIB=libcarlifevehicle.so
TARGET-APP=libtestall: carlifelib libtestcarlifelib:
make -C ./ -f $(TOPDIR)/Makefile.build
$(CC) -shared -o $(TARGET-LIB) built-in.o
$(CP) $(TARGET-LIB) $(OBJDIR) libtest:CarLifeLibTest.cpp
$(CC) -o $(TARGET-APP) $< -Iinclude -L./ -lcarlifevehicle -lpthread $(LFLAGS)
$(CP) $(TARGET-APP) $(OBJDIR)
/vendor/lib:/system/lib
包含所放置lib动态库的位置
export LD_LIBRARY_PATH=/system/lib:$LD_LIBRARY_PATH其他库也是在这个路径,是正常可加载
文中指定lib**.so export LD_LIBRARY_PATH 仅仅是指定链接库的路径..运行程序 、lib库都需要时交叉编译产生的,才可以在arm机器上跑。
具体交叉编译,请百度 arm-linux-gcc 等的使用》。。