mpp icon indicating copy to clipboard operation
mpp copied to clipboard

./mpi_enc_test: symbol lookup error: ./mpi_enc_test: undefine symbol: mpp_spinlock_unlock

Open xiaoxiaojiea opened this issue 3 years ago • 4 comments

mpp_develop中的aarch64使用的是交叉编译器编译的,cmake 与 make 都成功,mpi_enc_test 编译出来了,在注意运行报错 /lib/ld-linux-aarch64.so.1: No such file or directory ,然后移动到板子上 报错 ./mpi_enc_test: symbol lookup error: ./mpi_enc_test: undefine symbol: mpp_spinlock_unlock ,请问是我的交叉编译器设置的问题吗?还是 arm.linux.cross.cmake 文件需要改动那里?

xiaoxiaojiea avatar Feb 16 '22 12:02 xiaoxiaojiea

交叉编译出来的东西在主机是不能运行的,报 ld 的问题正常 在板上运行出错,是因为只更新了 test 程序,没去更新 mpp 库本身,需要更新 librockchip_mpp.so.0

HermanChen avatar Feb 16 '22 12:02 HermanChen

@HermanChen 您所说的更新mpp库,得到 librockchip_mpp.so.0 是要自己编译 mpp 库是不

xiaoxiaojiea avatar Feb 16 '22 13:02 xiaoxiaojiea

是的,需要 mpp 库和 mpi_enc_test 是同一个代码编译出来的,这样才能匹配上

HermanChen avatar Feb 17 '22 00:02 HermanChen

是的,需要 mpp 库和 mpi_enc_test 是同一个代码编译出来的,这样才能匹配上

那为什么直接在板子上编译的 test 程序可以直接运行,我也没有编译 mpp 库哦

xiaoxiaojiea avatar Feb 17 '22 07:02 xiaoxiaojiea

是的,需要 mpp 库和 mpi_enc_test 是同一个代码编译出来的,这样才能匹配上

那为什么直接在板子上编译的 test 程序可以直接运行,我也没有编译 mpp 库哦

请教下,问题解决了么??我也遇到类似的情况:mpi_dec_test: symbol lookup error: mpi_dec_test: undefined symbol: _mpp_log_l

我的操作是在rk3399pro板卡上进行的(debian10系统),先git clone官方的mpp库下来,然后根据教程: `cd build/linux/aarch64

./make-Makefiles.bash

sudo make && sudo make install ` 然后执行命令: mpi_dec_test 测试下,就报了如上的错误。。求指点。。

lmw0320 avatar Oct 20 '22 09:10 lmw0320

ldd 看下这个可执行程序链接到哪个 mpp 库了

HermanChen avatar Oct 20 '22 09:10 HermanChen

估计是 mpi_dec_test 更新了,64 位库更新了,但是实际跑到了 32 位的库,这个库没更新

HermanChen avatar Oct 20 '22 09:10 HermanChen

toybrick@debian10:~/lmw/ffmpeg/mpp/build/linux/aarch64$mpi_dec_test mpi_dec_test: symbol lookup error: mpi_dec_test: undefined symbol: _mpp_log_l

toybrick@debian10:~/lmw/ffmpeg/mpp/build/linux/aarch64$ ldd mpi_dec_test ldd: ./mpi_dec_test: No such file or directory

toybrick@debian10:~/lmw/ffmpeg/mpp/build/linux/aarch64$ which mpi_dec_test /usr/local/bin/mpi_dec_test

lmw0320 avatar Oct 20 '22 09:10 lmw0320

ldd /usr/local/bin/mpi_dec_test linux-vdso.so.1 (0x0000007f92f08000) librockchip_mpp.so.1 => /lib/aarch64-linux-gnu/librockchip_mpp.so.1 (0x0000007f92d04000) libpthread.so.0 => /lib/aarch64-linux-gnu/libpthread.so.0 (0x0000007f92cd5000) libstdc++.so.6 => /lib/aarch64-linux-gnu/libstdc++.so.6 (0x0000007f92b4a000) libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x0000007f92a8d000) libgcc_s.so.1 => /lib/aarch64-linux-gnu/libgcc_s.so.1 (0x0000007f92a69000) libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000007f928f7000) /lib/ld-linux-aarch64.so.1 (0x0000007f92eda000)

lmw0320 avatar Oct 20 '22 09:10 lmw0320

估计是 mpi_dec_test 更新了,64 位库更新了,但是实际跑到了 32 位的库,这个库没更新

大佬,有没解决方案? 期待答复

lmw0320 avatar Oct 21 '22 03:10 lmw0320

/lib/aarch64-linux-gnu/librockchip_mpp.so.1 看下这个库的版本号,有没有 _mpp_log_l 符号 ls -l /lib/aarch64-linux-gnu/librockchip_mpp*

HermanChen avatar Oct 21 '22 03:10 HermanChen

/lib/aarch64-linux-gnu/librockchip_mpp.so.1 看下这个库的版本号,有没有 _mpp_log_l 符号 ls -l /lib/aarch64-linux-gnu/librockchip_mpp*

查看库的版本是这样么? strings /lib/aarch64-linux-gnu/librockchip_mpp.so.1 |grep GLIB 结果是: GLIBCXX_3.4 GLIBC_2.17

另外,ls -l /lib/aarch64-linux-gnu/librockchip_mpp*的执行结果: lrwxrwxrwx 1 root root 20 Feb 22 2021 /lib/aarch64-linux-gnu/librockchip_mpp.so -> librockchip_mpp.so.1 -rw-r--r-- 1 root root 1535216 Feb 22 2021 /lib/aarch64-linux-gnu/librockchip_mpp.so.0 lrwxrwxrwx 1 root root 20 Feb 22 2021 /lib/aarch64-linux-gnu/librockchip_mpp.so.1 -> librockchip_mpp.so.0 -rw-r--r-- 1 root root 3239362 Feb 22 2021 /lib/aarch64-linux-gnu/librockchip_mpp_static.a

lmw0320 avatar Oct 21 '22 09:10 lmw0320

librockchip_mpp.so.0 才是真正的库文件 strings /lib/aarch64-linux-gnu/librockchip_mpp.so.0 | grep author

HermanChen avatar Oct 21 '22 09:10 HermanChen

strings /lib/aarch64-linux-gnu/librockchip_mpp.so.0 | grep author

执行了这个命令,返回是空的

lmw0320 avatar Oct 21 '22 09:10 lmw0320

没有办法解决了么?? 我试了好几次重编译,还是老问题啊。。

lmw0320 avatar Oct 25 '22 07:10 lmw0320

上传编译过程截图:---原来第一次执行 ./make-Makefiles.bash命令时,还有提示:Looking for pthread_create in pthreads - not found。 我后面自己百度,根据博客的建议,执行了:sudo apt install doxygen,就没有那个提示了。但是仍旧不行。。

1 2 3

lmw0320 avatar Oct 25 '22 08:10 lmw0320

strings /lib/aarch64-linux-gnu/librockchip_mpp.so.0 | grep author

执行了这个命令,返回是空的

不应该啊,先看下文件有没有实体大小,正常带 git 编译的时候,会把版本信息写到库里

HermanChen avatar Oct 25 '22 08:10 HermanChen

另外,看这个 log 是把库安装到 /usr/local/lib/ 目录下,是不是要安装到 /usr/local/lib64/ 下才是对的?

HermanChen avatar Oct 25 '22 08:10 HermanChen

4

lmw0320 avatar Oct 25 '22 08:10 lmw0320

另外,看这个 log 是把库安装到 /usr/local/lib/ 目录下,是不是要安装到 /usr/local/lib64/ 下才是对的?

我没去特地指定安装目录。。这个在哪里设定的?

lmw0320 avatar Oct 25 '22 08:10 lmw0320

测试的话,就拷贝过去试试看,把 local 路径的库更新到 aarch64 下面去

HermanChen avatar Oct 25 '22 09:10 HermanChen

我后面肯定要直接用mpp来编解码视频文件的啊。。:(.... 目前是因为对模型测试都好了,就是要加速视频的编解码,不然延时太厉害了。。

lmw0320 avatar Oct 25 '22 09:10 lmw0320

测试的话,就拷贝过去试试看,把 local 路径的库更新到 aarch64 下面去

不是很明白你的意思,你是说把/usr/local/lib下面的那些so库,放到哪里的aarch64??

lmw0320 avatar Oct 25 '22 09:10 lmw0320

是啊。。。。。

HermanChen avatar Oct 25 '22 09:10 HermanChen

是啊。。。。。

我是拷贝了 /usr/local/lib下的所有so文件到了/lib/aarch64-linux-gnu/下 : sudo cp .so /lib/aarch64-linux-gnu/ 然后执行了mpi_enc_test,是不报错了。。。但是也没有任何信息返回。。 然后我拿个视频文件测试下: mpi_dec_test -i yolox/test.mp4 -o ./newtest.mp4 -w 640 -h 480 -f 0 -t 7 -n 10 结果就是一直卡着不动?? top命令可以看到进程,但是实际上却没有任何输出??

lmw0320 avatar Oct 25 '22 09:10 lmw0320

export mpp_syslog_perror=1

HermanChen avatar Oct 25 '22 10:10 HermanChen

log 是写到 syslog 里的

HermanChen avatar Oct 25 '22 10:10 HermanChen

早上来重启了板卡继续测试mpp,命令和昨天的一样,结果好像能跑了,但是输出视频是0字节。。截图出来是这样的: 1

lmw0320 avatar Oct 26 '22 01:10 lmw0320

我刚也查了/var/log/syslog,情况截图如下: 2

lmw0320 avatar Oct 26 '22 02:10 lmw0320

export mpp_syslog_perror=1

想请教下,我这种情况说明mpp成功安装了么?? 另外就是,为什么执行mpi_dec_test的时候,为什么不能正确执行呢??

lmw0320 avatar Oct 26 '22 02:10 lmw0320