在移植qemu的时候,遇到了很多error和warning,error当然是解决的对象了,潜在的危机就是warning了(因为warning总是被忽略)。
我遇到的一个主要的warning如下:
i686-linux-android-gcc: warning: ../disas/arm.o: linker input file unused because linking not done i686-linux-android-gcc: warning: ../disas/i386.o: linker input file unused because linking not done i686-linux-android-gcc: warning: ../hw/irq.o: linker input file unused because linking not done i686-linux-android-gcc: warning: ../hw/qdev-properties.o: linker input file unused because linking not done i686-linux-android-gcc: warning: ../hw/qdev.o: linker input file unused because linking not done i686-linux-android-gcc: warning: ../qemu-log.o: linker input file unused because linking not done i686-linux-android-gcc: warning: ../qom/container.o: linker input file unused because linking not done i686-linux-android-gcc: warning: ../qom/cpu.o: linker input file unused because linking not done i686-linux-android-gcc: warning: ../qom/object.o: linker input file unused because linking not done i686-linux-android-gcc: warning: ../qom/qom-qobject.o: linker input file unused because linking not done i686-linux-android-gcc: warning: ../tcg-runtime.o: linker input file unused because linking not done i686-linux-android-gcc: warning: cpu-exec.o: linker input file unused because linking not done i686-linux-android-gcc: warning: disas.o: linker input file unused because linking not done
上面warning导致生成的最终文件是属性是:
robin@ubuntu:~/bbbbb/bin$ file libqemu-arm.so libqemu-arm.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
文件的链接属性是:
robin@ubuntu:~/bbbbb/bin$ ldd libqemu-arm.so statically linked
由于那个warning或者说生成的文件的属性吧,该文件不能够正常运行,说是找不到依赖的系统库(就连起码的libc.so也找不到)。
说了半天的问题了,说说解决的方法吧————一句话,先解决点那个warning。
解决问题的宗旨:
1.让程序给我们服务————我们需要什么服务,就写什么程序。
2.检测程序是否为我们正确服务————程序结果是在电脑上体现的,如果不是我们预测的结果,就要查看程序运行的 log,在 log 中查找具体错误原因,根据原因改自己的程序。(log 是解决一切问题的入口点)
就拿我遇到的这个问题来说吧,我查找log,发现在pixman的confingure中,有很多检测设置static/shared的选项,程序起初默认是static的,而禁止了shared选项。 我就修改congfigure文件,为程序设置其为shared的,最终问题就顺利解决了。还是一句话,查找log,找出错误,分析原因,修改程序,解决错误。