您的位置:首页 > 运维架构 > Linux

LINUX下安装QT的惨痛经历

2012-05-22 09:17 627 查看
安装QT的惨痛经历

目标:2012.4月下旬,计划开始在linux上安装QT和ffmpeg,准备摸索一下视频客户端的开发。

----------------------------------------------------以下是安装过程----------------------------------------------------

由于没有额外的电脑,所以使用了虚拟机安装。

电脑上刚好有fedora6版本的linux,于是安装。在安装过程中选择了开发工具。

安装完成,从官网下载最新的qt4.8.0,拷贝到一个目录中然后解压。

进入目录后:./configure,选择开源“o”,并接受协议“yes”,2小时后,提示失败。找不到解决办法,后听说一般都用红帽企业版,后找来企业版5.5安装。

安装完成,然后把原始的qt卸载,计划安装新版本。结果无法安装,痛苦。由于原先的QT被卸载,所以又只好重装同一系统。

完成后不再卸载原始的qt,但是无qtcreator,随后在nokia官网下载qtcreator成功,然后安装成功。但是无法启动,双击时无任何反应,汗。

安装qtsdk,先:./configure,结果提示总线错误

安装ffmpeg,先:./configure,结果提示总线错误

又上nokia官网下载qtlib,结果下载下来的是qt4.8.1(文件名QtSdk-offline-linux-x86-v1.2.1.run,为方便,后面以<sdk>表示之),按照说明,先修改文件的执行模式:chmod u+x <sdk>,成功,然后安装:./<sdk>,仍然是错误:

/root/Desktop/vmtool/QtSdk-offline-linux-x86-v1.2.1.run: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /root/Desktop/vmtool/QtSdk-offline-linux-x86-v1.2.1.run)

/root/Desktop/vmtool/QtSdk-offline-linux-x86-v1.2.1.run: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /root/Desktop/vmtool/QtSdk-offline-linux-x86-v1.2.1.run)

/root/Desktop/vmtool/QtSdk-offline-linux-x86-v1.2.1.run: /lib/libc.so.6: version `GLIBC_2.9' not found (required by /root/Desktop/vmtool/QtSdk-offline-linux-x86-v1.2.1.run)

/root/Desktop/vmtool/QtSdk-offline-linux-x86-v1.2.1.run: /lib/libc.so.6: version `GLIBC_2.10' not found (required by /root/Desktop/vmtool/QtSdk-offline-linux-x86-v1.2.1.run)

/root/Desktop/vmtool/QtSdk-offline-linux-x86-v1.2.1.run: /lib/libc.so.6: version `GLIBC_2.11' not found (required by /root/Desktop/vmtool/QtSdk-offline-linux-x86-v1.2.1.run)

/root/Desktop/vmtool/QtSdk-offline-linux-x86-v1.2.1.run: /lib/libc.so.6: version `GLIBC_2.7' not found (required by /root/Desktop/vmtool/QtSdk-offline-linux-x86-v1.2.1.run)

上网上搜索,说需要libstdc++.so.6.0.10,然后下载之,放入/usr/lib/中,并修改libstdc++.so.6的链接为此文件,然后继续安装,此报另外的错误(内容没有记下来),此时原来的文本文件编辑器gedit无法启动,直接崩溃。然后换回libstdc++.so.6的链接文件为原来的libstdc++.so.6.0.8,无解。

再仔细看nokia网站说明,似乎没有说支持企业版linux,而是支持ubuntu。

然后下载ubuntu11.10的桌面版(基本上是最新的了),32位的。安装,过程中不能选择开发工具,但是等了好久,终于安装完成。

查看,结果无qt,只好重新安装。这次直接安装qt4.8.1(qt-everywhere-opensource-src-4.8.1),解压,进入目录:

./configure

结果提示无g++,晕,明显是安装了gcc,竟然没有g++!

后上网搜索g++,但似乎是集成在gcc里的,所以到官网http://gcc.gnu.org/下载gcc最新版本4.7.0,这里有很多镜像站点,我从加拿大的一个站点上下载,速度相当快,总大小有101MB。

下载完成,放进虚拟机,拷贝到一个目录中,然后解压,进入目录,运行如下命令(只有2个目录3个文件):

./install-sh

结果提示错误,我晕啊。

查看拷贝进来的压缩文件,只有183KB,而原始的是101MB,后重新拷贝,原来是上次没有拷贝完,但不知原因。解压后,目录里有很多文件夹和文件,这次正常了,再次进入,运行命令:

./configure

数分钟后,提示:

checking for objdir... .libs

checking for the correct version of gmp.h... no

configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+.

Try the --with-gmp, --with-mpfr and/or --with-mpc options to specify

their locations. Source code for these libraries can be found at

their respective hosting sites as well as at

ftp://gcc.gnu.org/pub/gcc/infrastructure/. See also

http://gcc.gnu.org/install/prerequisites.html for additional info. If

you obtained GMP, MPFR and/or MPC from a vendor distribution package,

make sure that you have installed both the libraries and the header

files. They may be located in separate packages.

汗,还需要另外的三个库!

上网搜索,结果在gcc官网的fpt站点上发现了它们,下载之,然后放入虚拟机中,拷贝到独立目录中,直接解压,然后进入gmp目录:

./configure

结果提示如下:

checking whether vsnprintf works... yes

checking whether sscanf needs writable input... no

checking for struct pst_processor.psp_iticksperclktick... no

checking for suitable m4... configure: error: No usable m4 in $PATH or /usr/5bin (see config.log for reasons).

没有m4(m4是什么东东?一头雾水),不管,进入mpc:

./configure

结果提示另外一个错误(没有记录下来),my god,要死人了,也不管,进入mpfr目录,然后:

./configure

结果提示内容和gmp一样,放我一条生路吧$#@@!!

继续上网搜索m4,发现这是一个库,下载最新版本,然后解压再安装:

./configure

make

make install

非常顺利,成功!除了qtctreator一次性成功之外,这个是第二次了,爽。

回过头安装gmp:

./configure

成功,再

make

也成功,继续

make install

又成功了,顺利啊,再安装mpc:

./confgiure

结果提示和上次一样,是有mpfr有关的,所以就先安装mpfr,成功,再安装mpc,也成功。松了口气。

安装gcc4.7.0:

./configure

结果错误还是一样,需要那3个库。晕,版本不对也不行啊,关键是有的库不好找,本来不想找,但现在看来不找还是不行,找就找了,终于找到了,下载地址:

mpfr,mpc:http://www.multiprecision.org/

mpfr:http://mpfr.loria.fr/mpfr-2.3.1/

gmp:http://gmplib.org/

这次一定要下载对应的版本了,下载结束再安装(无需再安装m4了,之前安装好的),仍然按照正确的顺序:先gmp,再mpfr,最后mpc,顺利,又成功了。

再安装gcc4.7.0:

./configure

几秒钟后结束,没有报错,心有喜。继续:

make

满屏飞滚字母,这下有好戏看了,一边写这个文章,一边让它在那里滚吧。

几十分钟过去了,它停住了!提示如下:

checking for i686-pc-linux-gnu-gcc... /home/ligo/qttools/gcc-4.7.0/host-i686-pc-linux-gnu/gcc/xgcc -B/home/ligo/qttools/gcc-4.7.0/host-i686-pc-linux-gnu/gcc/ -B/usr/local/i686-pc-linux-gnu/bin/ -B/usr/local/i686-pc-linux-gnu/lib/ -isystem /usr/local/i686-pc-linux-gnu/include
-isystem /usr/local/i686-pc-linux-gnu/sys-include

checking for suffix of object files... configure: error: in `/home/ligo/qttools/gcc-4.7.0/i686-pc-linux-gnu/libgcc':

configure: error: cannot compute suffix of object files: cannot compile

See `config.log' for more details.

make[2]: *** [configure-stage1-target-libgcc] 错误 1

make[2]:正在离开目录 `/home/ligo/qttools/gcc-4.7.0'

make[1]: *** [stage1-bubble] 错误 2

make[1]:正在离开目录 `/home/ligo/qttools/gcc-4.7.0'

make: *** [all] 错误 2

上网上搜索到几个网址:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40360

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35693

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35577

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36248

说的问题都很相似,但可能不是同一个版本。大致看了一下,有可能是mpfr库的路径造成的问题,于是想按照示例指定mpfr的路径,在终端上的查看mpfr的路径:

whereis mpfr

结果显示为空!竟然没有安装成功?但是安装的过程中没有看到有错误产生。

为了再看一遍是否成功,对mpfr重新安装了一遍,在make install结束后,离打印结束的位置很近的地方有如下提示:

----------------------------------------------------------------------

Libraries have been installed in:

/usr/local/lib

If you ever happen to want to link against installed libraries

in a given directory, LIBDIR, you must either use libtool, and

specify the full pathname of the library, or use the `-LLIBDIR'

flag during linking and do at least one of the following:

- add LIBDIR to the `LD_LIBRARY_PATH' environment variable

during execution

- add LIBDIR to the `LD_RUN_PATH' environment variable

during linking

- use the `-Wl,--rpath -Wl,LIBDIR' linker flag

- have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for

more information, such as the ld(1) and ld.so(8) manual pages.

----------------------------------------------------------------------

先不管,再:

whereis mpfr

结果还是显示为空,直接打开 /usr/local/lib,还是可以看见有mpfr库的:libmpfr.a、libmpfr.la、libmpfr.so.1.1.1、libmpfr.so.1.2.2,还有两个链接文件:libmpfr.so、libmpfr.so.1。

指定路径的例子如下:

../gcc-4.3.0/configure --with-gmp=/apps/gmp/4.2.2

--with-mpfr=/apps/mpfr/2.3.0 --prefix=/apps/gcc/4.2.2

--enable-languages=c,c++,fortran,java,objc,obj-c++,treelang

重新进入gcc4.7.0目录:

./configure --with-mpfr=/usr/local/lib

几秒钟就结束了,没有发现错误。继续:

make

结果错误依旧。

继续上网搜索,请参考网址:http://hi.baidu.com/jrckkyy/blog/item/f3427f11729e9200b8127b6d.html

需要安装gmp与mpfr

并且需要在.bash_profile(一般在/root目录下)配置LD_LIBRARY_PATH,把GMP与MPFR对应的lib配置上

如:LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpfr/2.4.0/lib:/usr/local/gmp/4.2.2/libexport LD_LIBRARY_PATH

一定要重启生效或者使用 source /root/.bash_profile

但我不是root用户,无法进入这个目录,晕,root用户还没有开启,还得找方法。哎,惨痛啊,今天都5.4号了,1周多了,这环境还没有搞定,看来搞linux有饭吃,服务就能赚钱了。

由于无法直接修改.bash_profile文件,所以就直接在命令行下胡乱试一下:

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

然后再make,结果错误一样。

继续搜索,找到了 http://topic.csdn.net/u/20110826/21/dd903bec-c852-4d7e-a5b1-05710c3804ee.html,问题是一样的,只是版本不一样,但是没有结果,再搜,又搜到一篇, href="http://www.cnblogs.com/shawn-zhou/archive/2009/08/06/1540624.html" target=_blank>http://www.cnblogs.com/shawn-zhou/archive/2009/08/06/1540624.html

configure: error: cannot compute suffix of object files: cannot compile gcc

Configure file can't find mpfr libs

export LD_LIBRARY_PATH=/usr/local/lib (if your mpfr is intalled in it)

按照它,我输入:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

然后再make,结果又错了,但信息不一样:

In file included from /usr/include/stdio.h:28:0,

from ../.././libgcc/../gcc/tsystem.h:88,

from ../.././libgcc/libgcc2.c:29:

/usr/include/features.h:323:26: fatal error: bits/predefs.h:没有那个文件或目录

compilation terminated.

make[3]: *** [_muldi3.o] 错误 1

make[3]:正在离开目录 `/home/ligo/qttools/gcc-4.7.0/i686-pc-linux-gnu/libgcc'

make[2]: *** [all-stage1-target-libgcc] 错误 2

make[2]:正在离开目录 `/home/ligo/qttools/gcc-4.7.0'

make[1]: *** [stage1-bubble] 错误 2

make[1]:正在离开目录 `/home/ligo/qttools/gcc-4.7.0'

make: *** [all] 错误 2

网上也找不到什么解决方法,我以为是自己可能把LD_LIBRARY_PATH变量给改坏了,用set看了一下,其值为:

/usr/local/lib,usr/local/lib

两个重复的没有啥特殊用途,于是重启虚拟机系统,再进入目录:

./configure

提示无权限,接着用

su

输入密码。这个用来提升权限,再

./configure

很快就成功,然后继续

make

结果又出错了:

/home/ligo/qttools/gcc-4.7.0/host-i686-pc-linux-gnu/gcc/cc1: error while loading shared libraries: libmpfr.so.1: cannot open shared object file: No such file or directory

make[3]: *** [_muldi3.o] 错误 1

make[3]:正在离开目录 `/home/ligo/qttools/gcc-4.7.0/i686-pc-linux-gnu/libgcc'

make[2]: *** [all-stage1-target-libgcc] 错误 2

make[2]:正在离开目录 `/home/ligo/qttools/gcc-4.7.0'

make[1]: *** [stage1-bubble] 错误 2

make[1]:正在离开目录 `/home/ligo/qttools/gcc-4.7.0'

make: *** [all] 错误 2

和之前不一样。似乎又是mpfr的问题,但是进入/usr/local/lib查看,libmpfr.so.1还是在的,而且其链接的那个文件也同样存在,怎么可能打不开呢?

5.07:

今天启动虚拟机,然后直接输入set查看LD_LIBRARY_PATH的值,结果不存在这个坏境变量,于是设置它:

export LD_LIBRARY_PATH=/usr/local/lib

然后再进入gcc-4.7.0目录:

./configure

成功,再

make

结果还是失败:/usr/include/features.h:323:26: fatal error: bits/predefs.h:没有那个文件或目录

看来一定要查看这个文件是什么了,网上搜索到 http://blog.sina.com.cn/s/blog_4e7453df01012r9d.html:
解决方法:

确定你的系统是x86_64 GNU/Linux

root@mm-desktop:/home/mm/android# uname -a

Linux mm-desktop 2.6.27-9-generic #1 SMP Thu Nov 20 22:15:32 UTC 2008 x86_64 GNU/Linux

安装libc6-dev-i386

sudo apt-get install libc6-dev-i386



不管了,直接输入命令看能否解决:

sudo apt-get install libc6-dev-i386

结果显示:末发现软件包libc6-dev-i386,没有办法,上网上又搜索到 http://www.cnblogs.com/superniaoren/archive/2012/3/23.html:
编译过程中出错,报错是fatal error: bits/predefs.h:没有那个文件或目录compilation terminated. ,需要安装包

multilib, 命令为 $sudo apt-get install gcc-multilib

我在命令行中输入:

sudo apt-get install gcc-multilib

结果提示:

现在没有可用的软件包 gcc-multilib,但是它被其它的软件包引用了。

这可能意味着这个缺失的软件包可能已被废弃,

或者只能在其他发布源中找到

E: 软件包 gcc-multilib 没有可供安装的候选者

汗!~~~

现在重装ubuntu的服务器版!没有图像安装界面,我晕啊,没办法,只好重装桌面版。先安装vmware tools,结果提示权限不够,输入:

sudo passwd

然后再输入超级用户的密码,这样以后就可以用su来提权限了。输入su,再输入刚刚输入的密码,成功提升权限,安装vmware tools。

搜索 multilib,终于在 http://packages.ubuntu.com/ 找到了:gcc-multilib_4.5.2-1ubuntu3_i386.deb,但是只有不到1K的字节,直接拷贝到虚拟机里,才发现,不是安装包,只是安装包的下载种子,还得用软件中心打开它,然后再点“安装”让系统下载并安装它,日,我的电脑都不能上网啊,这。。。。,网上怎么也找不到可以直接安装的安装包,这下完了。

用软件中心打开,上面主要有三个信息:

1. 提示:依赖关系不满足:gcc-4.5-multilib(>=4.5.2-1~)

2. 有个可用的“安装”按钮

3. 最下面提示:您需要先安装这个软件才能评论

这三个信息说明了一个简单的问题,就是这个软件还没有安装,而且是可以安装的,但这显示和第一个有点矛盾。不管它,我直接点“安装”,半天过去了,没有任何反应。我下载它的网址是http://packages.ubuntu.com/,于是让网管开启了这个网址的权限,然后再点“安装”,结果仍然是半天没有反应,哎。。。。

按照这个网上的说法,建议使用安装包管理器来更新软件:

您可以使用以下列表中的任何一个源镜像只要往您的 /etc/apt/sources.list 文件中像下面这样添加一行:

deb http://ftp.de.debian.org/debian lenny main

请使用最终确定的源镜像替换 ftp.de.debian.org/debian

我这里用了 http://mirrors.163.com/ubuntu/ ,我把它添加到/etc/apt/sources.list的最后一行如下:

deb http://mirrors.163.com/ubuntu/ lenny main

保存,结果无法保存!不是以root用户登录,哎。我不想再说什么了。

注销,然后重新以root登录,这次可以修改了,然后再以软件中心打开gcc-multilib_4.5.2-1ubuntu3_i386.deb,结果提示“请通过正常的软件源安装“gcc-multilib”。请只有在信任该来源时才安装此文件。”,但是安装按钮仍然可用。直接按它,结果显示“正在安装...”,有点希望了。

不管咋样,几十分钟之后,有个提示“安装于2012年5月7日”,后面的按钮变成了“重新安装”,说明应该是安装成功了。

再继续安装gcc-4.7.0,由于刚才已经configure过了,这次就直接make,结果不一会儿就又有提示了:

In file included from /usr/include/features.h:388:0,

from /usr/include/stdio.h:28,

from ../.././libgcc/../gcc/tsystem.h:88,

from ../.././libgcc/libgcc2.c:29:

/usr/include/gnu/stubs.h:7:27: fatal error: gnu/stubs-32.h:没有那个文件或目录

compilation terminated.

make[3]: *** [_muldi3.o] 错误 1

make[3]:正在离开目录 `/home/ligo/qttools/gcc/gcc-4.7.0/i686-pc-linux-gnu/libgcc'

make[2]: *** [all-stage1-target-libgcc] 错误 2

make[2]:正在离开目录 `/home/ligo/qttools/gcc/gcc-4.7.0'

make[1]: *** [stage1-bubble] 错误 2

make[1]:正在离开目录 `/home/ligo/qttools/gcc/gcc-4.7.0'

make: *** [all] 错误 2

果然出现了在搜索其它问题时,也看到网上有说的问题,哎.....

搜索到 http://blog.chinaunix.net/uid-14753126-id-3148516.html,解决方法就是安装包,在命令行中输入:

apt-get install g++-multilib

然后询问是否安装,选择“Y”接受,开始下载。下载完后,很快就安装完成。为了保险,重新安装gcc:

./configure

没错,再

make

不一会儿又出错了,错误和上次一样!但那个安装,显然是已经成功了,这。。。。

5.08:

今天星期二了。

没辙了,就启动虚拟机瞎逛,不知不觉到了系统更新中,由于连网,所以看到了有几百个更新可用,大概看了一下,发现有些头文件可以更新,于是按照缺省的选择,又把去掉了一小部分绝对无用的更新,比如蓝牙、打印驱动什么的,然后开始更新,等了半天,终于更新完成,重启,再进到gcc目录,直接./configure,成功再make结果出现一样的错误。

进入/usr/include/gnu目录查看,里面有stubs.h和stubs-64.h文件,就是没有stubs-32.h文件。

自己在/usr/include下搜索,结果发现,在/usr/include/i386-linux-gnu/gnu中有这个文件(但没有64的那个,这个不用管),直接把它拷贝到/usr/include/gnu目录中,然后:

make

过了一会儿,出错:

/usr/bin/ld: cannot find crti.o: No such file or directory

collect2: error: ld returned 1 exit status

make[3]: *** [libgcc_s.so] 错误 1

make[3]:正在离开目录 `/home/ligo/qttools/gcc/gcc-4.7.0/i686-pc-linux-gnu/libgcc'

make[2]: *** [all-stage1-target-libgcc] 错误 2

make[2]:正在离开目录 `/home/ligo/qttools/gcc/gcc-4.7.0'

make[1]: *** [stage1-bubble] 错误 2

make[1]:正在离开目录 `/home/ligo/qttools/gcc/gcc-4.7.0'

make: *** [all] 错误 2

上网搜索,找到 http://hi.baidu.com/ch02221/blog/item/0a7368120cf73203dc5401e3.html(最后部分):
换装ubuntu64位系统后,升级到11.10后(经测试该方法也适用于12.04)编译程序又出现类似错误:

/usr/bin/ld: cannot find crt1.o: No such file or directory

/usr/bin/ld: cannot find crti.o: No such file or directory

/usr/bin/ld: cannot find -lgcc_s

collect2: ld returned 1 exit status

解决办法:

export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu

sudo ln -sf /lib/x86_64-linux-gnu/libgcc_s.so.1 /usr/lib/x86_64-linux-gnu/libgcc_s.so

之前用的是LD_LIBRARY_PATH,于是我猜这里写错了,就用了LD_LIBRARY_PATH,同时手动到目录/usr/lib/x86_64-linux-gnu目录查看,发现这个目录为空!汗!刚刚看头文件是/usr/include/i386-linux-gnu,所以又在/usr/lib中查找i386-linux-gnu,果然发现了这个目录,打开一看,里面的目录和文件真多,查找crti.o文件,果然发现在这里,于是:

export LD_LIBRARY_PATH=/usr/lib/i386-linux-gnu

再make,结果还是一样的错误,于是修改:

export LIBRARY_PATH=/usr/lib/i386-linux-gnu

再make,等,等,等,半个小时过去了,突然:

In file included from ../.././gcc/double-int.h:24:0,

from ../.././gcc/tree.h:31,

from ../.././gcc/c-lang.c:27:

/usr/local/include/gmp.h:515:12: error: ‘std::FILE’ has not been declared

make[3]: *** [c-lang.o] 错误 1

make[3]:正在离开目录 `/home/ligo/qttools/gcc/gcc-4.7.0/host-i686-pc-linux-gnu/gcc'

make[2]: *** [all-stage2-gcc] 错误 2

make[2]:正在离开目录 `/home/ligo/qttools/gcc/gcc-4.7.0'

make[1]: *** [stage2-bubble] 错误 2

make[1]:正在离开目录 `/home/ligo/qttools/gcc/gcc-4.7.0'

make: *** [all] 错误 2

操,又错了!

搜索到 http://groups.google.com/group/mozilla.dev.static-analysis/tree/browse_frm/month/2008-04/df617beb564fa9b7?rnum=11&_done=%2Fgroup%2Fmozilla.dev.static-analysis%2Fbrowse_frm%2Fmonth%2F2008-04%3F,有一段:
The only issue was the compiler error due to the

std::FILE in gmp.h header (4.2.1). That seems to be fixed with gmp

4.2.2. http://sagetrac.org/sage_trac/ticket/490.

这里不能用新版本,否则那gcc仍然编译不过,之前就已经说过了,而当前的这个版本有bug?无解。

又搜索到一个 http://groups.google.com/group/eql-user/browse_thread/thread/75c2ed7215fd19e4/94a770d0de4e8bce?lnk=raot:
> I fixed this by adding #include <stdio.h> to some sourse and header

> files.

This seems to be the standard way of solving this problem.

不会是让我要修改头文件吧?打开 /usr/local/include/gmp.h,然后在开头处添加了一行:

#if defined (__cplusplus)

#include <iosfwd> /* for std::istream, std::ostream, std::string */

#endif

#include <stdio.h> // 这一行是我添加的

然后再继续make,结果一样的错误!仿照之前的方法,从网上直接安装gcc:

sudo apt-get install gcc-4.7.0

结果提示没有这个软件包。

按照上面的方法,实际上是c-lang.c(位于gcc的安装目录中的gcc目录)包含tree.h,tree.h包含double-int.h,double-int.h包含gmp.h,所以在double-int.h包含gmp之前,添加了一行:

/* added by Ligo, 2012.05.08, for std::FILE has not been declared in gmp.h */

#include <stdio.h>

#ifndef GENERATOR_FILE

#include <gmp.h>

#endif

#include "coretypes.h"

然后再直接make。仍然是相同的错误,搜索到 http://gmplib.org/list-archives/gmp-bugs/2007-August/000820.html,有一段如下:
> I think the correct way to fix is:

>

> #if defined (__cplusplus)

> extern "C" {

> #ifdef _GMP_H_H***E_FILE

> using std::FILE;

> #endif

> #endif

>

> But I am not a C++ expert.

>

在extern "C" {一行之后,添加了一个预定义条件,然后继续直接make(刚刚修改的double-int.h没有恢复)。等了至少1个多小时之后,终于结束而且没有报错~-~,然后

make install

大约10分钟,结束,而且成功~-~

然后拷贝qt-everywhere-opensource-src-4.8.1.tar.gz到一个目录中,解压,进入,然后:

./configure

结果失败:

Basic XLib functionality test failed!

You might need to modify the include and library search paths by editing

QMAKE_INCDIR_X11 and QMAKE_LIBDIR_X11 in /home/ligo/qttools/qt/qt-everywhere-opensource-src-4.8.1/mkspecs/linux-g++.

其中/home/ligo/qttools/qt是我拷贝到的路径。进入linux-g++目录(没有这个文件,而只有这个目录)里面有2个文件:qmake.conf、qmake.conf.h。.h文件里似乎没啥修改的,conf文件里似乎指定的是一些路径,内容不多,其中有三行如下:

include(../common/linux.conf)

include(../common/gcc-base-unix.conf)

include(../common/g++-unix.conf)

其它似乎都没有包含有路径信息,先不管它,还是上网上搜索吧,发现大量相同内容的网址,比如http://www.linuxso.com/linuxrumen/19162.html,就按照上面的方法,直接安装3个库:

sudo apt-get install libX11-dev libXext-dev libXtst-dev

然后接受一些确认信息,大约十多分钟全部安装完毕。明天继续

5.09:

已经又周三了。上来不管三七21,直接进入目录,然后:

./configure

结果又出现了找不到crt1.o、crii.o文件的错误,看来LIBRARY_PATH在每次时候都需要重新设置,不会在安装成功之后也需要这样搞吧?怕怕地

经过大约半小时,结束,最后的提示如下:

Qt is now configured for building. Just run 'make'.

Once everything is built, you must run 'make install'.

Qt will be installed into /usr/local/Trolltech/Qt-4.8.1

To reconfigure, run 'make confclean' and 'configure'.

终于有希望了。然后make。大约40分钟之后,一大堆错误出来了:

In file included from ../3rdparty/javascriptcore/JavaScriptCore/API/APICast.h:30:0,

from ../3rdparty/javascriptcore/JavaScriptCore/API/JSBase.cpp:30:

../3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h:62:65: 错误:expected class-name before ‘{’ token

../3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h: 在构造函数‘QTJSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData(QTJSC::JSGlobalObject::JSGlobalObjectData::Destructor)’中:

../3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h:71:19: 错误:类型‘QTJSC::JSVariableObject::JSVariableObjectData’不是‘QTJSC::JSGlobalObject::JSGlobalObjectData’的直接基类

../3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h: 在构造函数‘QTJSC::JSGlobalObject::JSGlobalObject()’中:

../3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h:166:124: 错误:对‘QTJSC::JSVariableObject::JSVariableObject(QTWTF::PassRefPtr<QTJSC::Structure>, QTJSC::JSGlobalObject::JSGlobalObjectData*)’的调用没有匹配的函数

../3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h:166:124: 附注:备选是:

In file included from ../3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h:27:0,

from ../3rdparty/javascriptcore/JavaScriptCore/API/APICast.h:30,

from ../3rdparty/javascriptcore/JavaScriptCore/API/JSBase.cpp:30:

../3rdparty/javascriptcore/JavaScriptCore/runtime/JSVariableObject.h:86:9: 附注:QTJSC::JSVariableObject::JSVariableObject(QTWTF::NonNullPassRefPtr<QTJSC::Structure>, QTJSC::JSVariableObject::JSVariableObjectData*)

../3rdparty/javascriptcore/JavaScriptCore/runtime/JSVariableObject.h:86:9: 附注: no known conversion for argument 2 from ‘QTJSC::JSGlobalObject::JSGlobalObjectData*’ to ‘QTJSC::JSVariableObject::JSVariableObjectData*’

In file included from ../3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h:27:0,

from ../3rdparty/javascriptcore/JavaScriptCore/API/APICast.h:30,

from ../3rdparty/javascriptcore/JavaScriptCore/API/JSBase.cpp:30:

../3rdparty/javascriptcore/JavaScriptCore/runtime/JSVariableObject.h:43:11: 附注:QTJSC::JSVariableObject::JSVariableObject(const QTJSC::JSVariableObject&)

../3rdparty/javascriptcore/JavaScriptCore/runtime/JSVariableObject.h:43:11: 附注: 备选需要 1 实参,但提供了 2 个

In file included from ../3rdparty/javascriptcore/JavaScriptCore/API/APICast.h:30:0,

from ../3rdparty/javascriptcore/JavaScriptCore/API/JSBase.cpp:30:

../3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h: 在构造函数‘QTJSC::JSGlobalObject::JSGlobalObject(QTWTF::NonNullPassRefPtr<QTJSC::Structure>, QTJSC::JSGlobalObject::JSGlobalObjectData*, QTJSC::JSObject*)’中:

../3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h:173:47: 错误:对‘QTJSC::JSVariableObject::JSVariableObject(QTWTF::NonNullPassRefPtr<QTJSC::Structure>&, QTJSC::JSGlobalObject::JSGlobalObjectData*&)’的调用没有匹配的函数

../3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h:173:47: 附注:备选是:

In file included from ../3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h:27:0,

from ../3rdparty/javascriptcore/JavaScriptCore/API/APICast.h:30,

from ../3rdparty/javascriptcore/JavaScriptCore/API/JSBase.cpp:30:

../3rdparty/javascriptcore/JavaScriptCore/runtime/JSVariableObject.h:86:9: 附注:QTJSC::JSVariableObject::JSVariableObject(QTWTF::NonNullPassRefPtr<QTJSC::Structure>, QTJSC::JSVariableObject::JSVariableObjectData*)

../3rdparty/javascriptcore/JavaScriptCore/runtime/JSVariableObject.h:86:9: 附注: no known conversion for argument 2 from ‘QTJSC::JSGlobalObject::JSGlobalObjectData*’ to ‘QTJSC::JSVariableObject::JSVariableObjectData*’

In file included from ../3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h:27:0,

from ../3rdparty/javascriptcore/JavaScriptCore/API/APICast.h:30,

from ../3rdparty/javascriptcore/JavaScriptCore/API/JSBase.cpp:30:

../3rdparty/javascriptcore/JavaScriptCore/runtime/JSVariableObject.h:43:11: 附注:QTJSC::JSVariableObject::JSVariableObject(const QTJSC::JSVariableObject&)

../3rdparty/javascriptcore/JavaScriptCore/runtime/JSVariableObject.h:43:11: 附注: 备选需要 1 实参,但提供了 2 个

In file included from ../3rdparty/javascriptcore/JavaScriptCore/API/APICast.h:30:0,

from ../3rdparty/javascriptcore/JavaScriptCore/API/JSBase.cpp:30:

../3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h: 在成员函数‘QTJSC::JSGlobalObject::JSGlobalObjectData* QTJSC::JSGlobalObject::d() const’中:

../3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h:270:100: 错误:从类型‘QTJSC::JSVariableObject::JSVariableObjectData* const’到类型‘QTJSC::JSGlobalObject::JSGlobalObjectData*’中的 static_cast 无效

In file included from ../3rdparty/javascriptcore/JavaScriptCore/API/APICast.h:30:0,

from ../3rdparty/javascriptcore/JavaScriptCore/API/JSBase.cpp:30:

../3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h: 在成员函数‘void QTJSC::JSGlobalObject::addStaticGlobals(QTJSC::JSGlobalObject::GlobalPropertyInfo*, int)’中:

../3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h:327:18: 错误:‘struct QTJSC::JSGlobalObject::JSGlobalObjectData’没有名为‘registerArray’的成员

../3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h:328:48: 错误:‘struct QTJSC::JSGlobalObject::JSGlobalObjectData’没有名为‘registerArray’的成员

In file included from ../3rdparty/javascriptcore/JavaScriptCore/API/APICast.h:30:0,

from ../3rdparty/javascriptcore/JavaScriptCore/API/JSBase.cpp:30:

../3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h: 在成员函数‘QTJSC::JSGlobalObject::JSGlobalObjectData* QTJSC::JSGlobalObject::d() const’中:

../3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h:270:103: 警告:在有返回值的函数中,控制流程到达函数尾 [-Wreturn-type]

make[1]: *** [obj/release/JSBase.o] 错误 1

make[1]:正在离开目录 `/home/ligo/qttools/qt/qt-everywhere-opensource-src-4.8.1/src/script'

make: *** [sub-script-make_default-ordered] 错误 2

shit!搞这玩意儿的人都是吃屎的,难道也像我开发软件一样不做测试的吗?

这个问题很难找,通过bing才搜索到一个网址 http://archive.linuxfromscratch.org/mail-archives/blfs-dev/2012-April/022605.html,下载了一个补丁 qt-everywhere-opensource-src-4.8.0-gcc-4.7.patch(需要在网页上往回到补丁列表中下载)。

patch文件如何用?又犯难了,只好再搜索,查到http://wenku.baidu.com/view/7bce1c1910a6f524ccbf8520.html,原来直接用patch命令就行。以前没有用过,先在命令行下直接输入patch回车,结果显示:

程序“patch”尚未安装。 您可以使用以下命令安装:

apt-get install patch

原来在root用户下,apt-get前无需要sudo!好,我也直接输入apt-get install patch,不一会儿安装完毕。

看了一下,这个命令好像不太好用,这个patch文件也不大,就打开来看,内容很简单,就是需要修改2个文件,每个都是去掉2行添加一行,我直接去修改了对应的文件,然后重新configure,再make。在configure的过程中,中间好像是有一些错误,但最后还是成功了。

现在还在make中,没事,上QT看了一下 http://qt-project.org/doc/qt-4.8/install-x11.html,多简单。不到12点开始make,2点左右结束,然后:
make install

现在都2点多了,终于结束了,关键是没有报错!~-~

发现,在已安装的程序里没有QT,汗···,只好自己找到安装目录,然后进入Bin目录,里面还是没有qtCreator!双击启动designer,结果画面出来了,但是惨不忍睹,界面一团糟,看不清字,大部分是中文,但字不清楚,翻译严重缺失,字间距可以放个窗口了,晕

难道是系统字体的问题?我把系统语言改成英文,然后重启虚拟机,再启动qtdesigner,结果还是一样!启动qtconfigure,结果界面也一样糟糕,而且似乎找不到修改语言的选项,哎,梦一场啊。

5.10:

昨天晚上没有加班,下班走人,今天照样上班。本来预报的是周3、4、5、6都有雨,结果今天都周4了,也没见到雨,可能预报天气的在忽悠我等吧。

安装的qt不能用,我毫无办法了。但是下载的那个sdk一直没有安装上去,就想拿它再试试。昨天一直往虚拟机上拷贝,结果无论如何都拷贝不上去,没办法,昨天快下班时,在本机上开了个www服务器,然后在虚拟机上登录www服务器才算是把qtsdk给传过去了。

刚刚安装<sdk>,直接运行它说是没有权限,就按照nokia上的说明,先修改什么模式(注:这两天都是用root用户登录的系统):

chmod u+x <sdk>

然后再运行它,成功了,出现了安装向导,梦寐以求啊。把所有内容全部选上,然后下一步,不多时,安装完毕。直接启动qtcreator,新建一个桌面工程,包含原始的代码,直接构建,结果如下:

:-1: 错误:cannot find crt1.o: No such file or directory

:-1: 错误:cannot find crti.o: No such file or directory

:-1: 错误:collect2: error: ld returned 1 exit status

晕,看来crtx.o的踒是必需设置的了,但要如何设置呢?根据 http://qt-project.org/doc/qt-4.8/install-x11.html的提示,再加上前面的错误的解决,决定添加一个环境变量:
setenv LIBARAY_PATH /usr/lib/i386-linux-gnu

结果提示“setenv: command not found”

搜索添加环境变量,到http://blog.csdn.net/guolele2010/article/details/6310904,按照其第三个方法“所有用户的全局设置”,我直接用gedit打开 /etc/profile 文件,然后在最后添加了一行:

export LIBRARY_PATH=/usr/lib/i386-linux-gnu

保存,然后在命令行中:

source /etc/profile

再echo #LIBRARY_PATH

有显示了,正是我设置的路径,再构建工程,还是一样的错误,然后重启qtcreator,再构建,仍然不变!晕~~~

我再把这个路径加入到PATH变量中,同样的方法,加到LIBRARY_PATH的后面,结果仍然是相同的错误。难道需要重启?汗!真的需要重启虚拟机!重启之后,直接打开这个工程,然后编译顺利通过,然后运行,出窗口了!

到此,qt总算是成功了,不过可能是拐了8个360度的弯罢了。后面还有ffmpeg需要安装,可能又是一项大工程。

从svn上下载最新的ffmpeg,然后拷贝到虚拟机上,进入目录,也同样:

./configure

结果提示 bash: ./configure: Permission denied

说是没有执行模式,所以需要修改一下(http://blog.sina.com.cn/s/blog_5ff8e88e010110aj.html):

chmod +x configure

然后再执行,结果:

bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory

搜索到 http://hi.baidu.com/zhangtqqq/blog/item/87a511331ecd405dad4b5f1e.html,按照上面的方法,直接调用dos2unix命令,结果显示没有,就安装它:
apt-get install dos2unix

很小,三两下就安装完了,然后:

dos2unix configure

./configure

提示:

yasm not found, use --disable-yasm for a crippled build

然后再:

./configure --disable-yasm

不一会儿完成。然后:

make

大约10分钟之后提示:

libavcodec/x86/h264_qpel_mmx.c: Assembler messages:

libavcodec/x86/h264_qpel_mmx.c:1294: Error: operand type mismatch for `cmp'

libavcodec/x86/h264_qpel_mmx.c:1294: Error: operand type mismatch for `cmp'

libavcodec/x86/h264_qpel_mmx.c:1298: Error: operand type mismatch for `cmp'

libavcodec/x86/h264_qpel_mmx.c:1298: Error: operand type mismatch for `cmp'

libavcodec/x86/h264_qpel_mmx.c:964: Error: operand type mismatch for `cmp'

libavcodec/x86/h264_qpel_mmx.c:964: Error: operand type mismatch for `cmp'

libavcodec/x86/h264_qpel_mmx.c:964: Error: operand type mismatch for `cmp'

make: *** [libavcodec/x86/dsputil_mmx.o] Error 1

在baidu上搜索不到,在bing上搜索到 http://comments.gmane.org/gmane.comp.handhelds.openembedded/51922,上面列举了多个bug,其中有一个就是这个,点它后面的continue查看这个bug的完整信息,网址为 href="http://permalink.gmane.org/gmane.comp.handhelds.openembedded/51954" target=_blank>http://permalink.gmane.org/gmane.comp.handhelds.openembedded/51954,实际上通过补丁解决这个问题的,这里还按照上次的补丁做法,直接用gedit打开这个文件来修改,但这次有点麻烦,本来提示出错的行是1294、1298、964,但实际上这个文件只有1201行!

猜测应该是由于宏定义引起的行数变化,没有办法,只有完全依照这个网上的方法来修改了。文件修改了4个位置,都是把“g”改成了“rm”,再继续make,时又报错:

ffmpeg.c: At top level:

ffmpeg.c:248:21: warning: ‘sws_flags’ defined but not used [-Wunused-variable]

CC cmdutils.o

cmdutils.c:43:21: fatal error: version.h: No such file or directory

compilation terminated.

make: *** [cmdutils.o] Error 1

My god!网上搜遍了,也找不到解决办法,没有碰到一个有说这个问题的!在ffmpeg的安装说明上非常简单,就三步,configure,make,make install。我搜索原始的ffmpeg目录,没有看到version.h文件,又上到ffmpeg的svn服务器上,看了几个版本都没有这个文件,奇怪了。但后来注意到ffmpeg的根目录中有一个version.sh文件,我记得似乎有的文件是可以通过执行其它文件来生成的,这里就试一下,结果这个文件不可执行,那也简单,就像前面一个改一下模式:

chmod +x version.sh

然后再执行,可以了,然后直接再make,结果成功了。

再到目录中查看,发现有了version.h文件,现在想起来,前面有次make时,看到一开始就有一行打打印:

/bin/sh: /home/ligo/qttools/qt/ffmpeg_org/version.sh: Permission denied

可能是这个文件不能执行导致了不能自动生成version.h文件。

接着:

make install

不一会儿就成功结束了!现在,全部安装完了,但有可能qt对ffmpeg的库和头文件还需要设置,等下先试试再说。

网上搜索到 http://blog.csdn.net/betty_ting/article/details/5769701

在重新装过一个Ubuntu10.04的虚拟机后,又重新在Ubuntu上装了QT4 和QT Creator 2.0,然后重新下载源码编译过ffmpeg。后来能够在QT中直接调用了ffmpeg中的库函数。这里调用的前提是:

1>ffmpeg的正确编译与安装;

2>在QT Creator所建的工程中,.pro文件的正需修改;要改的关键地方是

LIB += -L. -lavcodec -lavformat……

INCLUDEPATH += . ./ffmpeg ./libavcodec ./libavformat ……

3>在夹头文件时,应将#include<>加在intern “C”{}里。

这看起来似乎有点麻烦,还是再摸索一下吧。



总结:

为了安装开发工具qt和ffmpeg,而必需安装它们所依赖的库。一个是要选对操作系统,一个是要选对库。这里的操作系统缺少g++库,所以要安装gcc库(其中包含了g++),而gcc又依赖其它多个库,要一一安装,由于一些库的路径问题,导致必需设置环境变量才能进行后面的步骤。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: