编译及运行Qt程序时遇到的问题

1.GConf-WARNING

(process:3867): GConf-WARNING **: 15:15:05.359: Client failed to connect to the D-BUS daemon:
Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
Gtk-Message: 15:15:05.368: Failed to load module "canberra-gtk-module"

问题原因:su/su root命令仅仅切换为root用户,获取了root权限,当前工作的shell环境并没有变;而su -/ su - root与su/su root不同点在于,增加了切换shell环境的功能,通过打印环境变量可以看出shell环境的变化;此时还漏了sudo这个小东西,sudo的功能虽然是暂时的,但是它也可以获取root权限的同时切换shell环境。
解决办法:使用su -方式切换为root用户后,再去运行程序。

2.X Error

X Error: BadAccess (attempt to access private resource denied) 10
  Extension:    130 (MIT-SHM)
  Minor opcode: 1 (X_ShmAttach)
  Resource id:  0x15e
X Error: BadShmSeg (invalid shared segment parameter) 128
  Extension:    130 (MIT-SHM)
  Minor opcode: 5 (X_ShmCreatePixmap)
  Resource id:  0x460000c
X Error: BadDrawable (invalid Pixmap or Window parameter) 9
  Major opcode: 62 (X_CopyArea)
  Resource id:  0x460000d

问题原因:没有导出QT_X11_NO_MITSHM环境变量。
解决办法:如果直接在终端执行export QT_X11_NO_MITSHM=1,则只在当前终端有效,下次再次打开终端就需要重新导出环境变量,比较麻烦。好点的方法就是进入当前用户的宿主目录下,vi ~/.bashrc,在末尾添加export QT_X11_NO_MITSHM=1,这样进入终端切换到了这个用户就会自动导出该环境变量。

3.一个愚蠢的问题

In file included from /usr/include/qt4/QtCore/qnamespace.h:45:0,
                 from /usr/include/qt4/QtCore/qobjectdefs.h:45,
                 from /usr/include/qt4/QtCore/qobject.h:47,
                 from /usr/include/qt4/QtCore/QObject:1,
                 from MyObject.h:5,
                 from main.cpp:1:
/usr/include/qt4/QtCore/qglobal.h:2901:42: error: expected initializer before ‘QtCoreModule’
     typedef QtValidLicenseFor##x##Module Qt##x##Module;

问题原因:我太菜了
解决办法:在定义类的时候,加上分号。

猜你喜欢

转载自blog.csdn.net/Meteor_s/article/details/83584683