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"...该怎么解决呀,困扰了好多天~

解决方案 »

  1.   

    编译时用-l参数指定这两个so文件的所在路径,可能还需要用LD_LIBRARY_PATH指定运行时的库搜索路径。
      

  2.   

    不建议按文档说的那样做,不要去动交叉编译器;按楼上说的设置 LD_LIBRARY_PATH 就行了
      

  3.   


    如下是我的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)
      

  4.   

    查看echo $LD_LIBRARY_PATH
    /vendor/lib:/system/lib
    包含所放置lib动态库的位置
      

  5.   

      android 我不知道,这个在哪设置的?
      

  6.   

    ./adb shell
    export LD_LIBRARY_PATH=/system/lib:$LD_LIBRARY_PATH其他库也是在这个路径,是正常可加载
      

  7.   

    您好,"CarLife对数据的传输和接收采用了protobuffer机制进行报文封装和解析,因此,在使用libcarlifevehicle.so之前需要对protobuffer源码进行交叉编译,获得protobuffer的动态连接库文件libprotobuf.so.8文件。"这个交叉汇编是怎么样做的?您是否已经开发成功?
      

  8.   

    楼主不要被误导了,首先拷贝到android机器上运行的(类似),需要将程序进行交叉编译,产生对应平台可运行的程序,
    文中指定lib**.so export LD_LIBRARY_PATH 仅仅是指定链接库的路径..运行程序 、lib库都需要时交叉编译产生的,才可以在arm机器上跑。
    具体交叉编译,请百度 arm-linux-gcc 等的使用》。。