Linux使用cmake编译项目,如何使用cmake在linux中构建Qt项目(How to build Qt project in linux with cmake)...

如何使用cmake在linux中构建Qt项目(How to build Qt project in linux with cmake)

我使用的是ubuntu 14.04,cmake 2.8.12.2,Qt5.6.2(内置版本),GNU make 3.81

用cmake PathToSource -G "Eclipse CDT4 - Unix Makefiles"运行cmake之后

我做的。 我得到#error "You must build your code with position independent code if Qt was built with -reduce-relocations. " "Compile your code with -fPIC (-fPIE is not enough)." # error "You must build your code with position independent code if Qt was built with -reduce-relocations. "\ #error "You must build your code with position independent code if Qt was built with -reduce-relocations. " "Compile your code with -fPIC (-fPIE is not enough)." # error "You must build your code with position independent code if Qt was built with -reduce-relocations. "\

然后我下载Qt5.7.0源文件,构建并安装它没有问题。 我再做cmake PathToSource -G "Eclipse CDT4 - Unix Makefiles" ,制作它。 我收到很多错误,比如/home/sflee/Documents/Software_dev/3rd_party/Qt5.7.0/include/QtCore/qhash.h:957:10: error: 'pair' does not name a type auto pair = qAsConst(*this).equal_range(akey); 和/home/sflee/Documents/Software_dev/3rd_party/Qt5.7.0/include/QtCore/qbasicatomic.h:285:14: error: 'Ops' has not been declared { return Ops::fetchAndAddRelease(_q_value, valueToAdd); } /home/sflee/Documents/Software_dev/3rd_party/Qt5.7.0/include/QtCore/qbasicatomic.h:285:14: error: 'Ops' has not been declared { return Ops::fetchAndAddRelease(_q_value, valueToAdd); }

怎么解决?

I am using ubuntu 14.04, cmake 2.8.12.2, Qt5.6.2 (a built version), GNU make 3.81

After I run cmake with cmake PathToSource -G "Eclipse CDT4 - Unix Makefiles"

I do make. I get #error "You must build your code with position independent code if Qt was built with -reduce-relocations. " "Compile your code with -fPIC (-fPIE is not enough)." # error "You must build your code with position independent code if Qt was built with -reduce-relocations. "\

I then download source file of Qt5.7.0, build and install it without problem. I do again cmake PathToSource -G "Eclipse CDT4 - Unix Makefiles", make it. I get many errors, such as /home/sflee/Documents/Software_dev/3rd_party/Qt5.7.0/include/QtCore/qhash.h:957:10: error: ‘pair’ does not name a type auto pair = qAsConst(*this).equal_range(akey); and /home/sflee/Documents/Software_dev/3rd_party/Qt5.7.0/include/QtCore/qbasicatomic.h:285:14: error: ‘Ops’ has not been declared { return Ops::fetchAndAddRelease(_q_value, valueToAdd); }

How to solve it?

原文:https://stackoverflow.com/questions/40316244

更新时间:2020-07-05 07:07

最满意答案

Qt 5.7需要C ++ 11编译器。 如果你从auto pair得到那种错误,听起来你的编译器没有编译C ++ 11代码。 有两个可能的原因:

你只需要将-std=c++11传递给你的编译器,正如这个问题所解释的那样 。

你有太旧的编译器。 但是,由于您使用相同的编译器编译Qt 5.7本身,这对您来说应该不是问题。

Qt 5.7 requires C++11 compiler. If you get that kind of error from auto pair, it sounds like your compiler is not compiling C++11 code. There are two possible reasons:

You just need to pass -std=c++11 to your compiler, as explaned under this question.

You have too old compiler. However, since you compiled Qt 5.7 itself with the same compiler, this shouldn't be the problem for you.

2017-05-23

相关问答

你的脚本有几个错误,还有一些东西可以改进。 更改后,它将如下所示: cmake_minimum_required(VERSION 3.0.2)

project(MyProject)

find_package(Qt5Widgets)

set(CMAKE_AUTOMOC ON)

set(CMAKE_AUTOUIC ON)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

add_library(mainwindow mainwindow.cpp)

target_link_lib

...

要在CMakeLists.txt中使用Qt5 ,您应该使用(组合)这些函数: 在顶级CMakeLists.txt中 #### Qt5

find_package( Qt5Core REQUIRED )

find_package( Qt5Widgets REQUIRED )

find_package( Qt5Gui REQUIRED )

find_package( Qt5OpenGL REQUIRED )

find_package( Qt5Multimedia REQUIRED )

find_pack

...

首先,如果要进行适当的依赖关系处理,请明确列出要包含的文件,替换file(GLOB ...) 。 这还将确保构建正在为您期望的文件集创建依赖关系。 除了下面的原因, 这个答案还有更多关于你可能想要这样做的细节。 AUTOUIC的CMake文档包括以下声明: 如果找到与ui_.h匹配的预处理程序#include指令,并且存在.ui文件,则将执行uic以生成相应的文件。 您能否确认您的.cpp源代码具有遵循此模式的#include指令? 在您的file(GLOB

...

CMake生成顺序是根据文件和目标之间的依赖关系计算的。 如果您的qt库依赖于.ui文件生成的标头,那么您必须在目标qt输入中添加${qt_UI_H} : QT5_WRAP_UI(qt_UI_H ${qt_UI})

[...]

add_library(qt "${DIR_SRC}/qt/form_main.cpp" ${qt_UI_H})

在编译libqt之前,CMake通常应该在.ui文件上执行UIC 顺便说一句,使用target_link_libraries只在链接时设置目标之间的依赖关系。

...

这不是cmake问题,而是使用about.cpp文件损坏。 由于某种原因,它有流浪的角色。 解决方案是“uncorrupt it”,然后它将使用相同的cmake文件。 This is not a cmake issue, but corruption with your about.cpp file. It has got stray characters for one reason or another. The solution is "uncorrupt it", and then it

...

将qt5添加到CMakeLists.txt与qt4不同,你可以找到许多这样的有用链接,顺便说一下我的ubuntu的版本是12.04并且我安装了没有apt-get的qt,我使用这种格式在我的cmakelists中查找qt。文本 : find_package(Qt5Widgets)

include_directories(${Qt5Widgets_INCLUDES}

/opt/Qt5.0.2/5.0.2/gcc/include/QtGui

/opt/Qt5.0.2/5.0.2/gcc/include

...

我认为你是这个bug的受害者(仍未解决)。 我不是100%确定出了什么问题,但你可以在评论中找到一些想法。 I think you're a victim of this bug (still unsolved). I'm not 100% sure of what's going wrong, but you can find some ideas in the comments.

您可以在Qt Creator中使用或不使用Qt,使用或不使用C ++编译器,使用或不使用cmake二进制文件等。 Qt Creator使用工具包作为(多个)项目中一起使用的东西的集合,因此您不必一次又一次地定义这些相同的设置。 套件中可用的设置取决于您启用的插件,如果未设置某些信息,Creator非常高兴 - 只要您正在处理的项目不需要此信息。 因此,如果你打开一个基于qmake的项目,如果一个工具包没有设置Qt版本(这是提供qmake二进制文件),创建者会抱怨。 如果您尝试打开基于cmake的项

...

您需要使用CMAKE_PREFIX_PATH 。 例如: cmake.exe -DCMAKE_PREFIX_PATH="C:/path/to/Qt/5.X/compiler/lib/cmake"

You need to use CMAKE_PREFIX_PATH. For example: cmake.exe -DCMAKE_PREFIX_PATH="C:/path/to/Qt/5.X/compiler/lib/cmake"

Qt 5.7需要C ++ 11编译器。 如果你从auto pair得到那种错误,听起来你的编译器没有编译C ++ 11代码。 有两个可能的原因: 你只需要将-std=c++11传递给你的编译器,正如这个问题所解释的那样 。 你有太旧的编译器。 但是,由于您使用相同的编译器编译Qt 5.7本身,这对您来说应该不是问题。 Qt 5.7 requires C++11 compiler. If you get that kind of error from auto pair, it sounds lik

...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux cmake 编译项目,使用CMake构建复杂工程

0. 什么是CMakeCMake是一个跨平台的编译、安装、测试以及打包工具;CMake不直接编译软件,而是结合原生构建系统来构建软件。CMake配置文件是CMakeList.txt文件(每个源码文件夹下都要有一个),CMake根据配置文件在生成Unix的Makefile或VS的solut…

Linux防火墙屏蔽ip6,观点|Linux 发行版们应该禁用 IPv4 映射的 IPv6 地址吗?

从各方面来看,互联网向 IPv6 的过渡是件很缓慢的事情。不过在最近几年,可能是由于 IPv4 地址资源的枯竭,IPv6 的使用处于上升态势。相应的,开发者也有兴趣确保软件能在 IPv4 和 IPv6 下工作。但是,正如近期 OpenBSD 邮…

linux db2 权限管理,DB2五种管理权限

DB2五种管理权限SYSADM, SYSCTRL SYSMAINT DBADM and LOAD前三个权限是instance-level,and can only be assigned to a group and are done so through the Database Manager Configuration file.后两个权限是database-level,are assigned to a user or group for …

boost 线程 linux,Boost Linux线程第一课

#include#includevoid ThreadFunc(){std::cout<}int main(){boost::thread thrd1(&ThreadFunc);thrd1.join();return 0;}编译指令 g test.cpp -lboost_thread注意&#xff1a;没有链接boost_thread&#xff0c;出错提示如下&#xff1a;undefined reference to boo…

linux 链接文件 通配符,linux globbing文件通配符

在linux中使用ls、cp、mv、rm等命令时可以使用文件通配符匹配操作多个文件。匹配模式*&#xff1a;匹配任意长度的任意字符?&#xff1a;匹配任意单个字符[]&#xff1a;匹配指定范围内的任意单个字符(文件通配不区分字母的大小写)[^]&#xff1a;匹配非制定范围内的任意单个字…

linux 升级centos7,Linux之从Centos 6.x 升级Centos7

1、安装升级工具依赖的软件包yum -y install openscap pcre-devel libxml2-devel libxslt-devel m2crypto python-simplejson mod_wsgi2、安装以下软件的最新版&#xff0c;可以到这里查找&#xff1a;http://dev.centos.org/centos/6/upg/x86_64/Packagesrpm -ihv http://dev.…

linux和pe修复win10启动项,pe下如何重建win10引导?pe下win10引导修复图文教程

[文章导读] 随着win10系统的流行&#xff0c;越来越多的小伙伴经常遇到win10系统引导丢失的情况&#xff0c;我们知道win10系统现在采用的是uefi引导&#xff0c;以前的一些修复工具都只能修复传统模式mbr格式下的硬引导&#xff0c;但对于uefi引导不是很清楚&#xff0c;uefi引…

linux下实现定时器,在Linux操作系统下实现定时器简介

在Linux实现一个定时器&#xff0c;不像Win32下那样直观。在Win32调用SetTimer就行了&#xff0c;在Linux下则没有相应函数可以直接调用。定时器作为一个常用的功能&#xff0c;在Linux当然也有相应实现。下面我们看看几种常用的方法。要实现定时器功能&#xff0c;最土的办法实…

c语言课程设计大作业模版,c语言课程设计报告模板下载

c语言课程设计报告模板是一款专业的设计模板&#xff0c;对于在大学有需要些设计报告的朋友&#xff0c;可以下载这款模板作为参考&#xff0c;了解设计报告的需求&#xff0c;基本上毕业的论文设计也是在这个基础上严格要求的&#xff0c;欢迎下载使用。C语言介绍C语言是一门面…

c语言error和,C语言ERROR精选.doc

C语言ERROR精选Ambiguous operators need parentheses ) ~. [1 L: f& a/ J不明确的运算需要用括号括起 # n5 J! G c( m: ! o& \( P. CAmbiguous symbol xxx - n# d??i/ t0 K8 M不明确的符号 6 r% o0 \- N! _2 UArgument list syntax error % l, j/ O9 \; x1 j1 e参数…

c语言如何把变量按位颠倒,求答案,用C语言编程,用户输入一个正整数,把他的各位数字前后颠倒,并输入点到后的结果...

满意答案q15173278975推荐于 2017.11.26采纳率&#xff1a;58% 等级&#xff1a;13已帮助&#xff1a;5665人用字符串处理很简单#include #include void main (){int n,i;char s[20];scanf("%d", &n);sprintf(s,"%d", n);printf("%d\n",s…

中南大学12月13日考c语言,中南大学2010级C语言试卷

中南大学考试试卷2010 -- 2011 学年 1 学期 时间110分钟学时学分 考试形式&#xff1a;班级 学号 姓名 总分100分,占总评成绩70 %一、选择题(每小题1.5分,共计30分)1. C语言中变量定义与使用的关系是 。A) 必须先定义&#xff0c;后使用 B)可以先使用&#xff0c;后定义 C) 可以…

c语言123报数,新人求解一道C语言题。。。麻烦了

有一百个人按编号排成一队&#xff0c;从1开始按123123报数&#xff0c;报3者退出&#xff0c;直到队尾&#xff0c;又从队尾向队首报数(1开始)&#xff0c;依旧报3的退出&#xff0c;重复执行直至队列剩2个&#xff0c;求此2人的原始编号&#xff0c;这是题目&#xff0c;下面…

素数 c语言 时间少,C语言判断素数怎么优化时间,1000000以内,不用代码,指点一下就好...

匿名用户1级2016-09-04 回答基本思想用筛法求素数的基本思想是&#xff1a;把从1开始的、某一范围内的正整数从小到大顺序排列&#xff0c; 1不是素数&#xff0c;首先把它筛掉。剩下的数中选择最小的数是素数&#xff0c;然后去掉它的倍数。依次类推&#xff0c;直到筛子为空时…

android activity动态显示不出来,uiautomatorviewer 获取不到动态页面解决办法

以前玩 PC 最近刚搞 app 测试&#xff0c;费好大劲环境装好&#xff0c;高兴的点击 uiautomatorviewer.bat 想去抓取页面元素&#xff0c;尴尬的是首页就直接报错。Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesnt exis…

谷歌tts android手机自带引擎,Android使用讯飞语记引擎实现中文TTS

1.首先去讯飞语记官网下载并安装APP&#xff1a;2.设置语音引擎&#xff1a;设置>语言和输入法>文字转语音(TTS)输出>首选引擎3.在代码中使用&#xff1a;import android.content.Context;import android.speech.tts.TextToSpeech;import android.util.Log;import jav…

android xml 画下划线,android – strings.xml:如何从标记前面的空格中删除下划线?...

我的strings.xml中有以下行&#xff1a;This is a test在我的活动xml中,我在TextView中引用了这个字符串&#xff1a;android:layout_width"wrap_content"android:layout_height"wrap_content"android:text"string/test_string" />奇怪的是,当…

android开发基本知识,Android应用开发基本知识点汇总

Activity一生命周期4种状态running/paused/stopped/killed生命周期Activity发动onCreate->onStart->onResume点Home回来主界面onPause->onStop再次回到原ActivityonRestart->onStart->onResume退出ActivityonPause->onStop->onDestroy进程优先级前台&…

android hls检测,安卓大部分浏览器播放HLS协议直播流会从头开始

遇到的问题HLS直播流在iOS系统中表现正常&#xff0c;但在安卓使用大部分浏览器(UC浏览器除外)播放ffmpeg生成的HLS直播流都会发生从头播放的问题&#xff0c;即不管何时播放直播流&#xff0c;都会从直播开头的内容开始播放(生成的第一个直播TS切片&#xff0c;eg:电影开始直播…

华为鸿蒙os2.0系统何时搭载手机,鸿蒙OS 2.0系统正式发布!余承东:明年华为系手机将会搭载...

原标题&#xff1a;鸿蒙OS 2.0系统正式发布&#xff01;余承东&#xff1a;明年华为系手机将会搭载由于众所周知的原因&#xff0c;华为手机这两年过的很艰难&#xff0c;尤其是今年力度大了后&#xff0c;华为手机接下来可能面临无芯片可用的严重情况。而除了一些硬件外&#…