我在this guide之后交叉編譯OpenCV for arm,并建立了這個sample program.
當我第一次像這樣運行時:
./DisplayImage image.png
我有:
./DisplayImage: error while loading shared libraries:
libopencv_highgui.so.3.1: cannot open shared object file: No such file or directory
所以我認為它需要庫libopencv_highgui.so.3.1.所以我將所有這些庫添加到/ lib:
(1) libopencv_highgui.so
(2) libopencv_highgui.so.3.1
(3) libopencv_highgui.so.3.1.0
符號鏈接:(1) – > (2) – > (3)
但現在我得到了:
./DisplayImage: error while loading shared libraries:
lib/libopencv_highgui.so.3.1: internal error
我在庫和可執行檔案上運行檔案來檢查它們的資訊,這是輸出:
.../opencv/platforms/linux/my_build/lib$file libopencv_highgui.so.3.1.0
libopencv_highgui.so.3.1.0: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=1107ba22b36437bedb37dbfe0250626c14759be9, not stripped
.../opencv_sample$file DisplayImage
DisplayImage: ELF 32-bit LSB executable, ARM, EABI5 version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=aef57fe79d0928ca3afdff8d1b65268e1ad72e77, not stripped
編輯:運行readelf -d DisplayImage | grep NEEDED產生:
0x00000001 (NEEDED) Shared library: [libopencv_highgui.so.3.1]
0x00000001 (NEEDED) Shared library: [libopencv_imgcodecs.so.3.1]
0x00000001 (NEEDED) Shared library: [libopencv_core.so.3.1]
0x00000001 (NEEDED) Shared library: [libstdc++.so.6]
0x00000001 (NEEDED) Shared library: [libgcc_s.so.1]
0x00000001 (NEEDED) Shared library: [libc.so.6]
0x00000001 (NEEDED) Shared library: [ld-linux-armhf.so.3]
除了ld-linux-armhf.so.3之外,我發現它們都在我的目標上.
什么可能導致這個“內部錯誤”問題?
uj5u.com熱心網友回復:
當編譯二進制檔案時,它可以使用共享庫,這些庫是帶有版本號的參考,以便您獲得受支持的庫版本.有時你可以通過sym鏈接一個較新的libary到一個舊名稱,二進制檔案將嘗試使用這個.
但這并不意味著二進制檔案將支持該版本.某些功能可能已更改,某些功能已洗掉或添加,依此類推.
因此,我建議針對較新的libary版本重新編譯二進制檔案,將在編譯時標記不兼容性.
您可以使用ldd查看庫依賴項.
例;
$ldd /bin/ls
linux-vdso.so.1 (0x00007ffc65ff3000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f9033f91000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9033bf1000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f9033979000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9033771000)
/lib64/ld-linux-x86-64.so.2 (0x0000558f25845000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9033551000)
編輯:ps …你不能只是復制libs,因為他們有自己的依賴項.你的交叉編譯機器需要類似的lib版本來編譯.
uj5u.com熱心網友回復:
我也遇到了類似的問題。目前還沒有解決。問題如下:
使用OpenCL的庫,來自于ARM官網,適用于32bit armv7的Mali-T628;ARM的庫不開源,提供了二進制so,大致有兩類版本“fbdev”和“x11”,不清楚有什么區別;但是下載下來試試都存在相同問題。
報錯是:
error while loading shared libraries: /lib/libOpenCL.so: internal error
我在測驗程式代碼中沒有呼叫任何OpenCL介面,只是為了測驗-l OpenCL
編譯沒有問題,問題應該出在加載libOpenCL.so的時刻。
但現在我也不知道為什么internal error...

不知道有沒有大佬說明一下啊。。。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/244406.html
標籤:其他技術討論專區
上一篇:又是一篇求助貼
