几个Ubuntu 64上编译32位程序碰到的问题


原本以为直接把源代码弄到Ubuntu 64bit的系统上直接编译就可以了。结果还很碰到了几个问题。这里总结一下,也当做个备份。

1. Vmware模拟64位系统的问题。在默认情况下,即使cpu支持64位,也会把intel的vt(visualization technology)关闭,而这是Vmware模拟64位系统必须的,所以要在bios里面把它打开。我一开始就搜索到了这个答案,但是重启几次之后还不行。又搜了一遍,才发现很多人其实都藏了一半没说清楚,这个需要冷启动,也就是关机一次再打开才生效。

2. gcc编译参数问题1. 头次编译,makefile完全没改,那么得到的错误是:

CPU you selected does not support x86-64 instruction set

cc -I/computer/home/me/fftw-2.1.3/fftw -I/computer/home/me/fftw-2.1.3/rfftw -ansi -O6 -fomit-frame-pointer -Wall -W -Wcast-qual -Wpointer-arith -Wcast-align -pedantic -fno-schedule-insns -fschedule-insns2 -malign-double -fstrict-aliasing -mcpu=pentiumpro -c ftdock.c
ftdock.c:1: error: CPU you selected does not support x86-64 instruction set
ftdock.c:1: error: -malign-double makes no sense in the 64bit mode

天地良心,这不是把64位支持打开了吗?后来才知道,需要修改makefile面-march的值,比如这里我们需要改成-march=x86-64,于是就可以了。有的文档说要改成m64,这个应该是跟具体的系统有关吧。反正Ubuntu 9.0.4上这么改就没问题了。

3. gcc编译参数问题2. 接下来的编译,报了个更诡异的错误:

"relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object;"

google了一下,还挺常见的。这需要在gcc 后面加上参数-fPIC,-fPIC参数声明链接库的代码段是可以共享的,但我不知道没有它带来的错误是为什么。姑且记下,以后备用。

相关内容