编译的过程中出现如下:
问题1:
查看ARM板上的/usr/lib目录与/lib目录发现都没有libjpeg.so.62这个文件,拷贝一份放到这两个目录当中,注意在Linux上用file命令查看需要ARM版本的,如果不是ARM版本还会提示这个错误,如找不到可以在ARM板上用下图命令进行链接
问题2:
分析认为是运行时libopencv_highgui.so和libopencv_objdetect.so链接../../lib/libopencv_core.so时找不到库文件造成的。问题就出在libopencv_core.so前面奇怪的"../../lib/"相对路径。用readelf -d查看libopencv_highgui.so文件信息如下:
Dynamic sectionat offset 0xbcee0 contains 32 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library:[../../lib/libopencv_imgproc.so]
0x00000001 (NEEDED) Shared library:[../../lib/libopencv_core.so]
0x00000001 (NEEDED) Shared library:[libstdc++.so.6]
0x00000001 (NEEDED) Shared library:[libm.so.6]
0x00000001 (NEEDED) Shared library:[libgcc_s.so.1]
0x00000001 (NEEDED) Shared library:[libc.so.6]
0x0000000c (INIT) 0x17a58
0x0000000d (FINI) 0xb284c
0x00000019 (INIT_ARRAY) 0xc48b0
0x0000001b (INIT_ARRAYSZ) 12 (bytes)
0x0000001a (FINI_ARRAY) 0xc48bc
0x0000001c (FINI_ARRAYSZ) 4 (bytes)
0x00000004 (HASH) 0x114
0x6ffffef5 (GNU_HASH) 0x26ac
0x00000005 (STRTAB) 0xa370
0x00000006 (SYMTAB) 0x4da0
0x0000000a (STRSZ) 29540 (bytes)
0x0000000b (SYMENT) 16 (bytes)
0x00000003 (PLTGOT) 0xc5000
0x00000002 (PLTRELSZ) 6040 (bytes)
0x00000014 (PLTREL) REL
0x00000017 (JMPREL) 0x162c0
0x00000011 (REL) 0x12230
0x00000012 (RELSZ) 16528 (bytes)
0x00000013 (RELENT) 8 (bytes)
0x00000016 (TEXTREL) 0x0
0x0000001e (FLAGS) TEXTREL
0x6ffffffe (VERNEED) 0x12190
0x6fffffff (VERNEEDNUM) 4
0x6ffffff0 (VERSYM) 0x116d4
0x6ffffffa (RELCOUNT) 1380
0x00000000 (NULL) 0x0
[root@localhostlibfile]# readelf -d libopencv_imgproc.so
Dynamic sectionat offset 0x19cef4 contains 29 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library:[../../lib/libopencv_core.so]
0x00000001 (NEEDED) Shared library:[libstdc++.so.6]
0x00000001 (NEEDED) Shared library:[libm.so.6]
0x00000001 (NEEDED) Shared library:[libgcc_s.so.1]
0x00000001 (NEEDED) Shared library:[libc.so.6]
0x0000000c (INIT) 0x1e628
0x0000000d (FINI) 0x182e2c
0x00000019 (INIT_ARRAY) 0x1a3ca8
0x0000001b (INIT_ARRAYSZ) 12 (bytes)
0x0000001a (FINI_ARRAY) 0x1a3cb4
0x0000001c (FINI_ARRAYSZ) 4 (bytes)
0x00000004 (HASH) 0x114
0x6ffffef5 (GNU_HASH) 0x2834
0x00000005 (STRTAB) 0xab8c
0x00000006 (SYMTAB) 0x4f9c
0x0000000a (STRSZ) 64070 (bytes)
0x0000000b (SYMENT) 16 (bytes)
0x00000003 (PLTGOT) 0x1a5000
0x00000002 (PLTRELSZ) 4720 (bytes)
0x00000014 (PLTREL) REL
0x00000017 (JMPREL) 0x1d3b8
0x00000011 (REL) 0x1b1f0
0x00000012 (RELSZ) 8648 (bytes)
0x00000013 (RELENT) 8 (bytes)
0x6ffffffe (VERNEED) 0x1b150
0x6fffffff (VERNEEDNUM) 4
0x6ffffff0 (VERSYM) 0x1a5d2
0x6ffffffa (RELCOUNT) 81
0x00000000 (NULL) 0x0
在ARM板上键入:cd ../../lib然后通过pwd命令查看发现此目录为/lib
因此把对应的动态链接库放到/lib目录里面,问题解决