之前看到很多初学Qt的Linux友们在使用qmake编译第一个HelloQt或者HelloWorld程序时报错,并且始终找不到原因。

前几天我也遇到了同样的问题,我用的是<精通Qt4编程>书上的例子,将代码用Vim输入之后qmake,再make结果报错N行

大部分是说什么什么为定义之类的,查了半天发现是只要把开头的几行#include<QtGui/..>里的文件包含进去就会出错,

但是不包含也不行,(后来发现网上不少人也在问这个问题,可是没说解决的),花了几个小时时间无果而终。

后来下载了QtCreatorQDevelop,重写程序,编译运行都正确,也就没深究下去了。

今天上网无意中看见一帖子,忽然想起自己原先写的程序(还好没删),一看恍然大悟。

以下是原帖地址:
http://www.linuxsir.org/bbs/thread54238.html

原帖的内容我也转载一下:
--------------------------------------------------------------------------------
SuSE下编译QT程序 
帖子1:
最近迷上了游泳和QT,活活。但是在SuSE下面建立了QT程序,并且用QT文档中的步骤自动建立的Makefile却死活不能编译。于是我第一反应就是升级QT到3.2,但是升级之后却还是不能编译,冥思苦想不得其解,于是就耐心下来看make之后的错误信息,并且跟踪到QT的代码里面看,发现报错的地方都是有C++关键词的地方,而且执行make之后的第一句是gcc -c ****,然后想起以前也遇到过,好象gcc只能编译C程序,要编译C++必须用g++,于是打开Makefile,把cc=gcc改成cc=g++,保存退出,结果QT程序就可以编译了 真是TNND
帖子2:
真是太惭愧了,这个问题的原因原来是因为我的源文件的后缀名不是cpp,然后Makefile就认为是C程序了,其实根本不需要修改Makefile就可以编译成功的。咳,自己还是太浮躁了,这么简单的问题没想到,平时用C用习惯了,转到C++连以前的基础都忘记了。
另外,在编译QT程序之前需要定义QTDIR这个环境变量,但是我用的是bash,在.profile里面加入了环境变量定义之后,却在登陆KDE之后丢失了QTDIR这个环境变量,需要我再定义一次,真奇怪啊。在SuSE上QTDIR=/usr/lib/qt3,如果按照QT文档安装的话,可能是QTDIR=/usr/local/.qt
--------------------------------------------------------------------------------

因为是使用Vim写的代码,保存的时候习惯性的存了.c的文件,结果系统默认使用gcc而不是g++,当然编译不了啦%>_<%。。

无语无语啦,把c文件都改成cpp再make一次,顺利生成可执行文件,而且感觉上这样编译的速度要比使用QtCreator或者QDevelop的速度要快不少,(QtCreator和QDevelop比的话,后者的编译速度要快一些,但是编辑功能更弱,个人感觉)。

总之总之,算是把问题的原因找出来了,也是一件开心的事哈。

http://blog.csdn.net/lynfam/article/details/4727163

VIM+qmake编译示例程序HelloQt出错问题的解决(文件名一定要使用.cpp,否则就会默认使用gcc编译,当然通不过)的更多相关文章

  1. 如何编译ReactNative示例程序Examples

    通过示例程序可以看到一些基本组件的使用,对于学习ReactNative是很有帮助的. 编译示例程序需要将整个项目导入到androidStudio中,androidStudio导入项目时选择react- ...

  2. .NET跨平台:在CentOS上编译dnx并运行ASP.NET 5示例程序

    在之前的博文中我们在 Ubuntu 上成功编译出了 dnx ,并且用它成功运行了 ASP.NET 5 示例程序.在这篇博文中我们将 Ubuntu 换成 CentOS. 目前 dnx 的编译需要用到 m ...

  3. Linux下g++编译thread出错的的解决方法

    错误如下图所示: 因为thread是C++11新加入的特性,所以我们在用g++编译的时候不能直接用,需要在g++后面加上 -std=c++0x -pthread 如果是gcc编译多线程的话则应该要用 ...

  4. linux 下gcc 编译结构体问题

    最近在linux 学习c语言的编程,发现好多原来在vs 上的在linux 都编译不过去,今天就遇到了一个问题就是结构体的编译的问题, 结构体大概的定义是 struct Node{ int a; int ...

  5. .NET跨平台:在Ubuntu上用自己编译的dnx运行ASP.NET 5示例程序

    在 Linux Ubuntu 上成功编译 dnx 之后,会在 artifacts/build/ 文件夹中生成 dnx-coreclr-linux-x64/ 与 dnx-mono/ 这2个文件夹,前者是 ...

  6. 单独编译IMX6Q的VPU示例程序:mxc_vpu_test.out

    mxc_vpu_test.out是飞思卡尔为IMX6Q编写的VPU示例程序,有编解码和简单的网络传输功能. 首先从/opt/freescale/pkgs/中提取出imx-test-3.0.35-4.1 ...

  7. FFmpeg示例程序合集-批量编译脚本

    此前做了一系列有关FFmpeg的示例程序,组成了<最简单的FFmpeg示例程序合集>,其中包含了如下项目:simplest ffmpeg player:                   ...

  8. 【Qt】命令行编译Qt程序(nmake)【转】

    简述 前两节讲解了如何在Visual Studio和Qt Creator中搭建Qt开发环境,并分享了我们第一个小程序-Hello World. 下面分享如何使用命令行来编译Qt程序.当然,MSVC和M ...

  9. Socket编程指南及示例程序(转)

    1         前言 在一些常用的编程技术中,Socket网络编程可以说是最简单的一种.而且Socket编程需要的基础知识很少,适合初学者学习网络编程.目前支持网络传输的技术.语言和工具繁多,但是 ...

随机推荐

  1. 自学HTML5第三节(拖放效果)

    今天来看看网页上的拖放效果,首先来看看什么是拖放———— 拖放 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 浏览器支持 Inte ...

  2. linux 生产环境搭建

    Linux基础命令杂记   今天又一次搞Linux生产环境搭建.这是种步骤很多,很繁琐而且又不得不做的事情.虽然做过很多次,但还是有很多步骤.命令不记得,每一次到处找资料很麻烦,于是将一些步骤记下,以 ...

  3. jquery的冒泡和默认行为

    如果在页面中重叠了多个元素,并且重叠的这些元素都绑定了同一个事件,那么就会出现冒泡问题. //HTML 页面 <div style="width:200px;height:200px; ...

  4. web2py官方文档翻译

    00前言 我相信能够轻松地构建高质量增长的web应用程序是至关重要的一个自由和开放的社会.这可以防止玩家最大的垄断信息的流通. 因此我从2007年开始web2py项目,主要是作为一种教学工具与简化we ...

  5. c/c++与java------之JNI学习(一)

    一.java 调用c/c++ 步骤: 1.在java类中创建一个native关键字声明的函数 2.使用javah生成对应的.h文件 3.在c/c++中实现对应的方法 4.使用vs2012创建一个win ...

  6. C++ dynamic_cast实现原理

    dynamic_cast是一个操作符,其用法不再赘述.查看汇编码可以发现实际调用的是这个函数__RTDynamicCast,其内部实现如下: rtti.h: #pragma once extern & ...

  7. fragment中listview触发事件setOnItemClickListener不好使

    <listView/>中// listview点击 ,高度wrap_content改成fill_prarent

  8. Javascript基本算法演练 Seek and Destroy

    转载自:http://aeroj-blog.logdown.com/posts/435808 Seek and Destroy You will be provided with an initial ...

  9. Linux学习之十二、命令别名与历史命令

    命令别名配置: alias, unalias 那么需要下达『 ls -al | more 』这个命令,我是觉得很烦啦! 要输入好几个单字!那可不可以使用 lm 来简化呢?当然可以,你可以在命令行下面下 ...

  10. javascript第九课"闭包"

    所谓闭包:就是一个函数内部又定义了一个函数,而这个函数能访问外部函数作用域范围内的变量,这个内部函数就叫做闭包!   js中的面向对象都是使用闭包来实现的 闭包里使用的变量会现在当前函数内搜索,没有的 ...