编译百度carlife动态库

xiefeng272 2017-12-28 02:07:30
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"...

该怎么解决呀,困扰了好多天~
...全文
4102 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
宁南学者 2018-06-27
  • 打赏
  • 举报
回复
楼主不要被误导了,首先拷贝到android机器上运行的(类似),需要将程序进行交叉编译,产生对应平台可运行的程序,
文中指定lib**.so export LD_LIBRARY_PATH 仅仅是指定链接库的路径..

运行程序 、lib库都需要时交叉编译产生的,才可以在arm机器上跑。
具体交叉编译,请百度 arm-linux-gcc 等的使用》。。
u014302170 2018-06-24
  • 打赏
  • 举报
回复
您好,"CarLife对数据的传输和接收采用了protobuffer机制进行报文封装和解析,因此,在使用libcarlifevehicle.so之前需要对protobuffer源码进行交叉编译,获得protobuffer的动态连接库文件libprotobuf.so.8文件。"这个交叉汇编是怎么样做的?您是否已经开发成功?
zhxianbin 2018-01-03
  • 打赏
  • 举报
回复
引用 5 楼 u014032613 的回复:
查看echo $LD_LIBRARY_PATH /vendor/lib:/system/lib 包含所放置lib动态库的位置
android 我不知道,这个在哪设置的?
xiefeng272 2018-01-03
  • 打赏
  • 举报
回复
查看echo $LD_LIBRARY_PATH /vendor/lib:/system/lib 包含所放置lib动态库的位置
xiefeng272 2018-01-03
  • 打赏
  • 举报
回复
./adb shell export LD_LIBRARY_PATH=/system/lib:$LD_LIBRARY_PATH 其他库也是在这个路径,是正常可加载
xiefeng272 2018-01-02
  • 打赏
  • 举报
回复
引用 3 楼 zhxianbin 的回复:
不建议按文档说的那样做,不要去动交叉编译器;按楼上说的设置 LD_LIBRARY_PATH 就行了
如下是我的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 TOPDIR

CROSS_COMPILE=arm-linux-androideabi-
LD=$(CROSS_COMPILE)ld
CC=$(CROSS_COMPILE)g++

CP=cp

export 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 -lprotobuf

export CFLAGS LFLAGS

OBJDIR=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=libtest

all: carlifelib libtest

carlifelib: 
	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)
老马何以识途 2017-12-29
  • 打赏
  • 举报
回复
编译时用-l参数指定这两个so文件的所在路径,可能还需要用LD_LIBRARY_PATH指定运行时的库搜索路径。
zhxianbin 2017-12-29
  • 打赏
  • 举报
回复
不建议按文档说的那样做,不要去动交叉编译器;按楼上说的设置 LD_LIBRARY_PATH 就行了
xiefeng272 2017-12-28
  • 打赏
  • 举报
回复
有木有做过类型项目的求解惑

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧