Ffmpeg bebop2修改的CV构建版本的程序在raspberry pi 3上创建SIGSEGV

Ffmpeg bebop2修改的CV构建版本的程序在raspberry pi 3上创建SIGSEGV,ffmpeg,raspberry-pi3,segmentation-fault,Ffmpeg,Raspberry Pi3,Segmentation Fault,我正在尝试使用树莓皮3自动导航bebop2。我从bebop2获取原始格式,并使用ffmpeg对其进行解码。它在英特尔体系结构上运行完全正常。我试着为arm交叉编译它,结果成功了。它运行正常,但几秒钟后崩溃,并给出SIGSEGV故障。我曾尝试用gdb来解决这个问题,但它给出了一个错误,即/usr/lib/arm-linux-gnuaebiff/libarmmem.so中的memcpy() 我首先尝试删除非arm指令依赖项 但是我得到了一个错误memcpy.S没有这样的文件或目录 我不知道该怎么办,

我正在尝试使用树莓皮3自动导航bebop2。我从bebop2获取原始格式,并使用ffmpeg对其进行解码。它在英特尔体系结构上运行完全正常。我试着为arm交叉编译它,结果成功了。它运行正常,但几秒钟后崩溃,并给出SIGSEGV故障。我曾尝试用gdb来解决这个问题,但它给出了一个错误,即/usr/lib/arm-linux-gnuaebiff/libarmmem.so中的memcpy()

我首先尝试删除非arm指令依赖项

但是我得到了一个错误memcpy.S没有这样的文件或目录

我不知道该怎么办,我现在陷入了困境

[编辑:1]

valgrind输出:

valgrind ./Controller
==1361== Memcheck, a memory error detector
==1361== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==1361== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==1361== Command: ./Controller
==1361== 
./Controller
==1361== Invalid read of size 8
==1361==    at 0x4845004: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361==  Address 0xd1cc50c is 12 bytes inside a block of size 18 alloc'd
==1361==    at 0x4833970: malloc (vg_replace_malloc.c:263)
==1361==    by 0xAFC77B3: ??? (in /usr/lib/arm-linux-gnueabihf/libtasn1.so.6.3.2)
==1361== 
==1361== Invalid read of size 4
==1361==    at 0x4845030: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361==  Address 0xd1cc72c is 20 bytes inside a block of size 22 alloc'd
==1361==    at 0x4833970: malloc (vg_replace_malloc.c:263)
==1361==    by 0xAFC77B3: ??? (in /usr/lib/arm-linux-gnueabihf/libtasn1.so.6.3.2)
==1361== 
==1361== Invalid read of size 8
==1361==    at 0x484501C: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361==  Address 0xd1ccf9c is 20 bytes inside a block of size 26 alloc'd
==1361==    at 0x4833970: malloc (vg_replace_malloc.c:263)
==1361==    by 0xAFC77B3: ??? (in /usr/lib/arm-linux-gnueabihf/libtasn1.so.6.3.2)
==1361== 
==1361== Invalid read of size 8
==1361==    at 0x4844FEC: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361==  Address 0xd1d59ac is 28 bytes inside a block of size 34 alloc'd
==1361==    at 0x4833970: malloc (vg_replace_malloc.c:263)
==1361==    by 0xAFC77B3: ??? (in /usr/lib/arm-linux-gnueabihf/libtasn1.so.6.3.2)
==1361== 
==1361== Invalid read of size 8
==1361==    at 0x4844F8C: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361==  Address 0xd1e7a24 is 20 bytes inside a block of size 26 alloc'd
==1361==    at 0x4833970: malloc (vg_replace_malloc.c:263)
==1361==    by 0xAFC77B3: ??? (in /usr/lib/arm-linux-gnueabihf/libtasn1.so.6.3.2)
==1361== 
disInstr(arm): unhandled instruction: 0xEE190F1D
                 cond=14(0xE) 27:20=225(0xE1) 4:4=1 3:0=13(0xD)
==1361== valgrind: Unrecognised instruction at address 0xcc78de8.
==1361==    at 0xCC78DE8: ??? (in /usr/lib/arm-linux-gnueabihf/libcrypto.so.1.0.0)
==1361== Your program just tried to execute an instruction that Valgrind
==1361== did not recognise.  There are two possible reasons for this.
==1361== 1. Your program has a bug and erroneously jumped to a non-code
==1361==    location.  If you are running Memcheck and you just saw a
==1361==    warning about a bad jump, it's probably your program's fault.
==1361== 2. The instruction is legitimate but Valgrind doesn't handle it,
==1361==    i.e. it's Valgrind's fault.  If you think this is the case or
==1361==    you are not sure, please let us know and we'll try to fix it.
==1361== Either way, Valgrind will now raise a SIGILL signal which will
==1361== probably kill your program.
==1361== Invalid read of size 4
==1361==    at 0x4844BB8: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361==  Address 0xd1eb788 is 48 bytes inside a block of size 50 alloc'd
==1361==    at 0x4833F2C: operator new(unsigned int) (vg_replace_malloc.c:282)
==1361==    by 0x77EC9E7: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/arm-linux-gnueabihf/libstdc++.so.6.0.20)
==1361== 
==1361== Invalid read of size 4
==1361==    at 0x4844FA0: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361==  Address 0xd1eb7f0 is 48 bytes inside a block of size 50 alloc'd
==1361==    at 0x4833F2C: operator new(unsigned int) (vg_replace_malloc.c:282)
==1361==    by 0x77EC9E7: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/arm-linux-gnueabihf/libstdc++.so.6.0.20)
==1361== 
disInstr(arm): unhandled instruction: 0xF1010200
                 cond=15(0xF) 27:20=16(0x10) 4:4=0 3:0=0(0x0)
==1361== valgrind: Unrecognised instruction at address 0x48426f4.
==1361==    at 0x48426F4: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361== Your program just tried to execute an instruction that Valgrind
==1361== did not recognise.  There are two possible reasons for this.
==1361== 1. Your program has a bug and erroneously jumped to a non-code
==1361==    location.  If you are running Memcheck and you just saw a
==1361==    warning about a bad jump, it's probably your program's fault.
==1361== 2. The instruction is legitimate but Valgrind doesn't handle it,
==1361==    i.e. it's Valgrind's fault.  If you think this is the case or
==1361==    you are not sure, please let us know and we'll try to fix it.
==1361== Either way, Valgrind will now raise a SIGILL signal which will
==1361== probably kill your program.
==1361== 
==1361== Process terminating with default action of signal 4 (SIGILL)
==1361==  Illegal opcode at address 0x48426F4
==1361==    at 0x48426F4: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361== 
==1361== HEAP SUMMARY:
==1361==     in use at exit: 541,641 bytes in 1,173 blocks
==1361==   total heap usage: 1,980 allocs, 807 frees, 571,016 bytes allocated
==1361== 
==1361== LEAK SUMMARY:
==1361==    definitely lost: 0 bytes in 0 blocks
==1361==    indirectly lost: 0 bytes in 0 blocks
==1361==      possibly lost: 410,404 bytes in 190 blocks
==1361==    still reachable: 131,237 bytes in 983 blocks
==1361==         suppressed: 0 bytes in 0 blocks
==1361== Rerun with --leak-check=full to see details of leaked memory
==1361== 
==1361== For counts of detected and suppressed errors, rerun with: -v
==1361== ERROR SUMMARY: 24 errors from 7 contexts (suppressed: 0 from 0)
Illegal instruction
(gdb) bt 
#0 0x76fbc3a0 in memcmp () from /usr/lib/arm-linux-gnueabihf/libarmmem.so 
#1 0x00000000 in ?? ()
=> 0x76fbc3a0 <+7344>:  vldmiacs    r1!, {d7}
(gdb) x/5i $pc
=> 0x76fbc3a0 <memcmp+7344>:    vldmiacs    r1!, {d7}
   0x76fbc3a4 <memcmp+7348>:    vstmiami    r0!, {s13}
   0x76fbc3a8 <memcmp+7352>:    vstmiacs    r0!, {d7}
   0x76fbc3ac <memcmp+7356>:    lsls    lr, r12, #27
   0x76fbc3b0 <memcmp+7360>:    vldmiami    r1!, {d2-d3}
反汇编输出(0x76fbc3a0):

valgrind ./Controller
==1361== Memcheck, a memory error detector
==1361== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==1361== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==1361== Command: ./Controller
==1361== 
./Controller
==1361== Invalid read of size 8
==1361==    at 0x4845004: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361==  Address 0xd1cc50c is 12 bytes inside a block of size 18 alloc'd
==1361==    at 0x4833970: malloc (vg_replace_malloc.c:263)
==1361==    by 0xAFC77B3: ??? (in /usr/lib/arm-linux-gnueabihf/libtasn1.so.6.3.2)
==1361== 
==1361== Invalid read of size 4
==1361==    at 0x4845030: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361==  Address 0xd1cc72c is 20 bytes inside a block of size 22 alloc'd
==1361==    at 0x4833970: malloc (vg_replace_malloc.c:263)
==1361==    by 0xAFC77B3: ??? (in /usr/lib/arm-linux-gnueabihf/libtasn1.so.6.3.2)
==1361== 
==1361== Invalid read of size 8
==1361==    at 0x484501C: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361==  Address 0xd1ccf9c is 20 bytes inside a block of size 26 alloc'd
==1361==    at 0x4833970: malloc (vg_replace_malloc.c:263)
==1361==    by 0xAFC77B3: ??? (in /usr/lib/arm-linux-gnueabihf/libtasn1.so.6.3.2)
==1361== 
==1361== Invalid read of size 8
==1361==    at 0x4844FEC: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361==  Address 0xd1d59ac is 28 bytes inside a block of size 34 alloc'd
==1361==    at 0x4833970: malloc (vg_replace_malloc.c:263)
==1361==    by 0xAFC77B3: ??? (in /usr/lib/arm-linux-gnueabihf/libtasn1.so.6.3.2)
==1361== 
==1361== Invalid read of size 8
==1361==    at 0x4844F8C: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361==  Address 0xd1e7a24 is 20 bytes inside a block of size 26 alloc'd
==1361==    at 0x4833970: malloc (vg_replace_malloc.c:263)
==1361==    by 0xAFC77B3: ??? (in /usr/lib/arm-linux-gnueabihf/libtasn1.so.6.3.2)
==1361== 
disInstr(arm): unhandled instruction: 0xEE190F1D
                 cond=14(0xE) 27:20=225(0xE1) 4:4=1 3:0=13(0xD)
==1361== valgrind: Unrecognised instruction at address 0xcc78de8.
==1361==    at 0xCC78DE8: ??? (in /usr/lib/arm-linux-gnueabihf/libcrypto.so.1.0.0)
==1361== Your program just tried to execute an instruction that Valgrind
==1361== did not recognise.  There are two possible reasons for this.
==1361== 1. Your program has a bug and erroneously jumped to a non-code
==1361==    location.  If you are running Memcheck and you just saw a
==1361==    warning about a bad jump, it's probably your program's fault.
==1361== 2. The instruction is legitimate but Valgrind doesn't handle it,
==1361==    i.e. it's Valgrind's fault.  If you think this is the case or
==1361==    you are not sure, please let us know and we'll try to fix it.
==1361== Either way, Valgrind will now raise a SIGILL signal which will
==1361== probably kill your program.
==1361== Invalid read of size 4
==1361==    at 0x4844BB8: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361==  Address 0xd1eb788 is 48 bytes inside a block of size 50 alloc'd
==1361==    at 0x4833F2C: operator new(unsigned int) (vg_replace_malloc.c:282)
==1361==    by 0x77EC9E7: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/arm-linux-gnueabihf/libstdc++.so.6.0.20)
==1361== 
==1361== Invalid read of size 4
==1361==    at 0x4844FA0: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361==  Address 0xd1eb7f0 is 48 bytes inside a block of size 50 alloc'd
==1361==    at 0x4833F2C: operator new(unsigned int) (vg_replace_malloc.c:282)
==1361==    by 0x77EC9E7: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/arm-linux-gnueabihf/libstdc++.so.6.0.20)
==1361== 
disInstr(arm): unhandled instruction: 0xF1010200
                 cond=15(0xF) 27:20=16(0x10) 4:4=0 3:0=0(0x0)
==1361== valgrind: Unrecognised instruction at address 0x48426f4.
==1361==    at 0x48426F4: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361== Your program just tried to execute an instruction that Valgrind
==1361== did not recognise.  There are two possible reasons for this.
==1361== 1. Your program has a bug and erroneously jumped to a non-code
==1361==    location.  If you are running Memcheck and you just saw a
==1361==    warning about a bad jump, it's probably your program's fault.
==1361== 2. The instruction is legitimate but Valgrind doesn't handle it,
==1361==    i.e. it's Valgrind's fault.  If you think this is the case or
==1361==    you are not sure, please let us know and we'll try to fix it.
==1361== Either way, Valgrind will now raise a SIGILL signal which will
==1361== probably kill your program.
==1361== 
==1361== Process terminating with default action of signal 4 (SIGILL)
==1361==  Illegal opcode at address 0x48426F4
==1361==    at 0x48426F4: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361== 
==1361== HEAP SUMMARY:
==1361==     in use at exit: 541,641 bytes in 1,173 blocks
==1361==   total heap usage: 1,980 allocs, 807 frees, 571,016 bytes allocated
==1361== 
==1361== LEAK SUMMARY:
==1361==    definitely lost: 0 bytes in 0 blocks
==1361==    indirectly lost: 0 bytes in 0 blocks
==1361==      possibly lost: 410,404 bytes in 190 blocks
==1361==    still reachable: 131,237 bytes in 983 blocks
==1361==         suppressed: 0 bytes in 0 blocks
==1361== Rerun with --leak-check=full to see details of leaked memory
==1361== 
==1361== For counts of detected and suppressed errors, rerun with: -v
==1361== ERROR SUMMARY: 24 errors from 7 contexts (suppressed: 0 from 0)
Illegal instruction
(gdb) bt 
#0 0x76fbc3a0 in memcmp () from /usr/lib/arm-linux-gnueabihf/libarmmem.so 
#1 0x00000000 in ?? ()
=> 0x76fbc3a0 <+7344>:  vldmiacs    r1!, {d7}
(gdb) x/5i $pc
=> 0x76fbc3a0 <memcmp+7344>:    vldmiacs    r1!, {d7}
   0x76fbc3a4 <memcmp+7348>:    vstmiami    r0!, {s13}
   0x76fbc3a8 <memcmp+7352>:    vstmiacs    r0!, {d7}
   0x76fbc3ac <memcmp+7356>:    lsls    lr, r12, #27
   0x76fbc3b0 <memcmp+7360>:    vldmiami    r1!, {d2-d3}
=>0x76fbc3a0:vldmiacs r1!,{d7}
x/5i$pc输出:

valgrind ./Controller
==1361== Memcheck, a memory error detector
==1361== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==1361== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==1361== Command: ./Controller
==1361== 
./Controller
==1361== Invalid read of size 8
==1361==    at 0x4845004: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361==  Address 0xd1cc50c is 12 bytes inside a block of size 18 alloc'd
==1361==    at 0x4833970: malloc (vg_replace_malloc.c:263)
==1361==    by 0xAFC77B3: ??? (in /usr/lib/arm-linux-gnueabihf/libtasn1.so.6.3.2)
==1361== 
==1361== Invalid read of size 4
==1361==    at 0x4845030: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361==  Address 0xd1cc72c is 20 bytes inside a block of size 22 alloc'd
==1361==    at 0x4833970: malloc (vg_replace_malloc.c:263)
==1361==    by 0xAFC77B3: ??? (in /usr/lib/arm-linux-gnueabihf/libtasn1.so.6.3.2)
==1361== 
==1361== Invalid read of size 8
==1361==    at 0x484501C: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361==  Address 0xd1ccf9c is 20 bytes inside a block of size 26 alloc'd
==1361==    at 0x4833970: malloc (vg_replace_malloc.c:263)
==1361==    by 0xAFC77B3: ??? (in /usr/lib/arm-linux-gnueabihf/libtasn1.so.6.3.2)
==1361== 
==1361== Invalid read of size 8
==1361==    at 0x4844FEC: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361==  Address 0xd1d59ac is 28 bytes inside a block of size 34 alloc'd
==1361==    at 0x4833970: malloc (vg_replace_malloc.c:263)
==1361==    by 0xAFC77B3: ??? (in /usr/lib/arm-linux-gnueabihf/libtasn1.so.6.3.2)
==1361== 
==1361== Invalid read of size 8
==1361==    at 0x4844F8C: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361==  Address 0xd1e7a24 is 20 bytes inside a block of size 26 alloc'd
==1361==    at 0x4833970: malloc (vg_replace_malloc.c:263)
==1361==    by 0xAFC77B3: ??? (in /usr/lib/arm-linux-gnueabihf/libtasn1.so.6.3.2)
==1361== 
disInstr(arm): unhandled instruction: 0xEE190F1D
                 cond=14(0xE) 27:20=225(0xE1) 4:4=1 3:0=13(0xD)
==1361== valgrind: Unrecognised instruction at address 0xcc78de8.
==1361==    at 0xCC78DE8: ??? (in /usr/lib/arm-linux-gnueabihf/libcrypto.so.1.0.0)
==1361== Your program just tried to execute an instruction that Valgrind
==1361== did not recognise.  There are two possible reasons for this.
==1361== 1. Your program has a bug and erroneously jumped to a non-code
==1361==    location.  If you are running Memcheck and you just saw a
==1361==    warning about a bad jump, it's probably your program's fault.
==1361== 2. The instruction is legitimate but Valgrind doesn't handle it,
==1361==    i.e. it's Valgrind's fault.  If you think this is the case or
==1361==    you are not sure, please let us know and we'll try to fix it.
==1361== Either way, Valgrind will now raise a SIGILL signal which will
==1361== probably kill your program.
==1361== Invalid read of size 4
==1361==    at 0x4844BB8: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361==  Address 0xd1eb788 is 48 bytes inside a block of size 50 alloc'd
==1361==    at 0x4833F2C: operator new(unsigned int) (vg_replace_malloc.c:282)
==1361==    by 0x77EC9E7: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/arm-linux-gnueabihf/libstdc++.so.6.0.20)
==1361== 
==1361== Invalid read of size 4
==1361==    at 0x4844FA0: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361==  Address 0xd1eb7f0 is 48 bytes inside a block of size 50 alloc'd
==1361==    at 0x4833F2C: operator new(unsigned int) (vg_replace_malloc.c:282)
==1361==    by 0x77EC9E7: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/arm-linux-gnueabihf/libstdc++.so.6.0.20)
==1361== 
disInstr(arm): unhandled instruction: 0xF1010200
                 cond=15(0xF) 27:20=16(0x10) 4:4=0 3:0=0(0x0)
==1361== valgrind: Unrecognised instruction at address 0x48426f4.
==1361==    at 0x48426F4: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361== Your program just tried to execute an instruction that Valgrind
==1361== did not recognise.  There are two possible reasons for this.
==1361== 1. Your program has a bug and erroneously jumped to a non-code
==1361==    location.  If you are running Memcheck and you just saw a
==1361==    warning about a bad jump, it's probably your program's fault.
==1361== 2. The instruction is legitimate but Valgrind doesn't handle it,
==1361==    i.e. it's Valgrind's fault.  If you think this is the case or
==1361==    you are not sure, please let us know and we'll try to fix it.
==1361== Either way, Valgrind will now raise a SIGILL signal which will
==1361== probably kill your program.
==1361== 
==1361== Process terminating with default action of signal 4 (SIGILL)
==1361==  Illegal opcode at address 0x48426F4
==1361==    at 0x48426F4: ??? (in /usr/lib/arm-linux-gnueabihf/libarmmem.so)
==1361== 
==1361== HEAP SUMMARY:
==1361==     in use at exit: 541,641 bytes in 1,173 blocks
==1361==   total heap usage: 1,980 allocs, 807 frees, 571,016 bytes allocated
==1361== 
==1361== LEAK SUMMARY:
==1361==    definitely lost: 0 bytes in 0 blocks
==1361==    indirectly lost: 0 bytes in 0 blocks
==1361==      possibly lost: 410,404 bytes in 190 blocks
==1361==    still reachable: 131,237 bytes in 983 blocks
==1361==         suppressed: 0 bytes in 0 blocks
==1361== Rerun with --leak-check=full to see details of leaked memory
==1361== 
==1361== For counts of detected and suppressed errors, rerun with: -v
==1361== ERROR SUMMARY: 24 errors from 7 contexts (suppressed: 0 from 0)
Illegal instruction
(gdb) bt 
#0 0x76fbc3a0 in memcmp () from /usr/lib/arm-linux-gnueabihf/libarmmem.so 
#1 0x00000000 in ?? ()
=> 0x76fbc3a0 <+7344>:  vldmiacs    r1!, {d7}
(gdb) x/5i $pc
=> 0x76fbc3a0 <memcmp+7344>:    vldmiacs    r1!, {d7}
   0x76fbc3a4 <memcmp+7348>:    vstmiami    r0!, {s13}
   0x76fbc3a8 <memcmp+7352>:    vstmiacs    r0!, {d7}
   0x76fbc3ac <memcmp+7356>:    lsls    lr, r12, #27
   0x76fbc3b0 <memcmp+7360>:    vldmiami    r1!, {d2-d3}
(gdb)x/5i$pc
=>0x76fbc3a0:vldmiacs r1!,{d7}
0x76fbc3a4:vstmiami r0!,{s13}
0x76fbc3a8:vstmiacs r0!,{d7}
0x76fbc3ac:lsls lr,r12,#27
0x76fbc3b0:vldmiami r1!,{d2-d3}

请发布完整的gdb
bt
输出,可能有人调用memcpy时出错。“memcpy.S没有这样的文件或目录”不是一个错误(对于gdb和valgrind),它是一个警告,您仍然可以使用
反汇编
命令和
x/5i$pc
从gdb看到汇编程序。valgrind的完整输出是什么?@osgx,请参阅输出。您是否可以使用
-fno省略帧指针
(可能还有
-g
)添加gcc(或其他)选项并再次收集valgrind/gdb日志(使用其他gdb的
info reg
反汇编
)?项目中修改了什么?您想要编译和运行的项目的全名是什么,完整的源代码是在哪里下载的(应用了哪些补丁?)。Valgrind的输出已经提到了malloc/免费使用附近的一些(非关键?)错误。我正在使用
ccmake
。我不知道如何使用
-fn不省略帧指针。我将arsdk_products/blob/master/native/config/product.mk修改为
TARGET_CPU=pi3
,将alchemy/blob/master/toolschains/CPU.mk修改为
ifeq($(TARGET_CPU)”,“pi3”)TARGET\u GLOBAL\u CFLAGS+=-march=armv7-a TARGET\u FLOAT\u ABI?=hard endif
该项目基本上是一个名为ARSDK的bebop2 sdk,我通过它操纵OpenCV的
mat
对象来实现检测和跟踪机制,该机制的输出决定了bebop2的移动。