需要帮助:动态链接程序在地址0x0崩溃,恕我直言,代码的第一个可执行指令。该程序使用gcc:
进行交叉编译arm-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/opt/cross/libexec/gcc/arm-linux-gnueabi/7.2.0/lto-wrapper
Target: arm-linux-gnueabi
Configured with: ../configure --prefix=/opt/cross --enable-bootstrap=no --build=x86_64-suse-linux --target=arm-linux-gnueabi --enable-languages=c,c++ --with-float=soft --disable-libmudflap --disable-multilib --with-cpu=arm7tdmi --with-float=soft
Thread model: posix
gcc version 7.2.0 (GCC)
在gdb下执行程序会导致立即分段错误:
Program received signal SIGSEGV, Segmentation fault.
0x00000000 in ?? ()
(gdb) info registers
r0 0x0 0
r1 0xbefff767 3204446055
r2 0x0 0
r3 0x2a017000 704737280
r4 0x0 0
r5 0x0 0
r6 0x0 0
r7 0x0 0
r8 0x0 0
r9 0x0 0
r10 0x0 0
r11 0x0 0
r12 0x0 0
sp 0xbefff640 0xbefff640
lr 0x0 0
pc 0x0 0x0
cpsr 0x60000010 1610612752
可执行文件文件:ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, not stripped
库位于公共路径(/ lib /)。
目标系统 uname -a :Linux nanoPi 3.4.39-h3 #12 SMP PREEMPT Thu Mar 23 15:51:07 CST 2017 armv7l armv7l armv7l GNU/Linux
编译选项:arm-linux-gnueabi-gcc -std=c99 -D_GNU_SOURCE=1 -D_POSIX_SOURCE=1 (... some source files ...) -O0 -g3 -pedantic -pedantic-errors -Wall -Wextra -Wconversion -c -fmessage-length=0 -MMD -MP -MF"src/options.d" -MT"src/options.o" -o "src/options.o" "../src/options.c"
静态链接,程序按预期工作。
我现在已经坚持这个问题几个小时了,没有想法要尝试什么或在哪里看得更远。谷歌搜索主要返回对解除引用空指针的引用,但我认为这是一个不同的情况。
任何提示都表示赞赏。