【问题标题】:Qt error: c: command not found / qmake could not locate g++ compilerQt 错误:c: command not found / qmake 找不到 g++ 编译器
【发布时间】:2016-07-19 03:17:03
【问题描述】:

我有 2 个版本的 SDK for Qt Creator:从开源编译和从 bitbake 编译。

开源 SDK 工作正常,但 bitbake 无法识别编译器。我已将 g++ 编译器添加到 build & Runsource environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi 以及。

make: c: Command not found make: [moc_utils.o] 错误 127(忽略)

制作: wl,-rpath-link,/opt/poky/charles/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/lib:

Command not found make: [quicknanobrowser] 错误 127(忽略)

这里是错误一编译器日志:

14:27:55:项目 quicknanobrowser 的运行步骤...

14:27:55: 开始: “/opt/poky/charles/sysroots/x86_64-pokysdk-linux/usr/bin/qt5/qmake” /home/hbulab/Qt5.5.1/Examples/Qt-5.5/webengine/quicknanobrowser/quicknanobrowser.pro -r -spec linux-oe-g++ CONFIG+=debug CONFIG+=declarative_debug CONFIG+=qml_debug

14:27:55:过程 “/opt/poky/charles/sysroots/x86_64-pokysdk-linux/usr/bin/qt5/qmake” 正常退出。

14:27:55:开始:“/usr/bin/make”

c -pipe -g -DLINUX=1 -DEGL_API_FB=1 -Wall -W -D_REENTRANT -fPIC -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_WEBENGINE_LIB -DQT_QUICK_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB

这是没有错误的,我们可以看到make 找不到g++ 编译器。我如何解决它?

14:29:08:项目 quicknanobrowser 的运行步骤... 14:29:08: 开始:“/opt/hio-imx6dl-board/opt/Qt5daisy/bin/qmake” /home/hbulab/Qt5.5.1/Examples/Qt-5.5/webengine/quicknanobrowser/quicknanobrowser.pro -r -spec devices/linux-imx6-g++ CONFIG+=debug CONFIG+=declarative_debug CONFIG+=qml_debug

14:29:09:过程 “/opt/hio-imx6dl-board/opt/Qt5daisy/bin/qmake”正常退出。

14:29:09:开始:“/usr/bin/make”

/opt/poky/1.6.1/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-g++ -c -pipe -march=armv7-a -mfpu=neon -DLINUX=1 -DEGL_API_FB=1 -mfloat-abi=hard -g -Wall -W -D_REENTRANT -fPIC -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_WEBENGINE_LIB -DQT_QUICK_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I。

MakeFile 信息:

MAKEFILE      = Makefile

####### Compiler, tools and options

CC            = $(OE_QMAKE_CC)
CXX           = $(OE_QMAKE_CXX)
DEFINES       = -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_WEBENGINE_LIB -DQT_QUICK_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB
CFLAGS        = -pipe $(OE_QMAKE_CFLAGS) -g -DLINUX=1 -DEGL_API_FB=1 -Wall -W -D_REENTRANT -fPIC $(DEFINES)
CXXFLAGS      = -pipe $(OE_QMAKE_CXXFLAGS) -g -DLINUX=1 -DEGL_API_FB=1 -Wall -W -D_REENTRANT -fPIC $(DEFINES)
INCPATH       = -I../../../Qt5.5.1/Examples/Qt-5.5/webengine/quicknanobrowser -I. -isystem /opt/poky/charles/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/include/qt5 -isystem /opt/poky/charles/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/include/qt5/QtWebEngine -isystem /opt/poky/charles/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/include/qt5/QtQuick -isystem /opt/poky/charles/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/include/qt5/QtWidgets -isystem /opt/poky/charles/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/include/qt5/QtGui -isystem /opt/poky/charles/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/include/qt5/QtQml -isystem /opt/poky/charles/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/include/qt5/QtNetwork -isystem /opt/poky/charles/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/include/qt5/QtCore -I. -I/opt/poky/charles/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/lib/qt5/mkspecs/linux-oe-g++
QMAKE         = /opt/poky/charles/sysroots/x86_64-pokysdk-linux/usr/bin/qt5/qmake

【问题讨论】:

  • 你在更换 SDK 时是否重新运行了qmake?生成的 Makefile 的开头是什么样的?它是否包含像CXX = $(OE_QMAKE_CXX) 这样的行?如果是这样,在收到错误后立即运行 echo $OE_QMAKE_CXX 会给您带来什么?
  • 如何重新运行 qmake?我所做的只是从 Qt Creator 切换套件。由于它在 make 失败,它没有创建任何 MakeFile
  • 好的,查看痕迹,qmake 似乎正在运行。您是否在 QtCreator 中配置了 source environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi 中的所有内容? (或者来源于启动 QtCreator 的同一个 shell?)。由于编译期间构建失败,${CC} 为空,qmake 将为您创建一个 Makefile。这也显示在您的日志中,因为 qmake 正常退出。如果您尝试在 shell 中运行 qmake 和 make 会发生什么?
  • 除了 g++ 编译器、qmake 之外,我没有添加任何东西,并添加了一个带有 sysroot 的工具包。 echo $OE_QMAKE_CXX 返回空。我可以在 shell 中运行 qmake 和 make,它创建的 makefile 和上面一样,但是 make 返回相同的错误。

标签: linux qt qt5 qt-creator bitbake


【解决方案1】:

由于${OE_QMAKE_CXX} 是空的,这表明你没有来源environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabiasenvironment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi

这应该可以手动编译:

 . /opt/poky/charles/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi
 echo $OE_QMAKE_CXX
 qmake
 make

(假设您不需要向 qmake 传递任何额外的参数)。

然后执行以下操作:

 . /opt/poky/charles/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi
 echo $OE_QMAKE_CXX
 qtcreator

请注意,您应该从源 environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi 的同一 shell 中启动 qtcreator。

这应该会让你继续前进。否则,我建议从正确构建一个小型、简单的 Qt 应用程序开始。

有关配置 QtCreator 的更多信息,例如,您可以查看how to setup QtCreator for cross-compilation

更新

由于 SDK 中似乎根本不包含 Qt5,因此我们首先必须生成一个合适的 SDK。我的首选方式:

 bitbake your-image -c populate_sdk

只要您的图片配方包含此功能,此方法就可以使用

 inherit populate_sdk_qt5

这将为您提供一个 SDK,其 sysroot 将匹配您的图像。

“较旧”的方法是使用特殊的工具链配方。对于 Qt5,这将是 meta-toolchain-qt5,或者一些包含/需要该配方的配方。在这种情况下,您将运行:

  bitbake meta-toolchain-qt5

不过,推荐的方法是使用图像特定的 SDK。

【讨论】:

  • 感谢您的回答。在我获取环境后,$OE_QMAKE_CXX 仍然是空的。于是我退后一步,对比一下环境文件。原来所有的export OE_QMAKE 都不见了。你知道为什么会这样吗?
  • 哦,那是完全不同的事情。在这种情况下,我假设您的 SDK 缺少 Qt。看看我在上面的补充。
  • 我做的那个其实是来自meta-toolchain-qt5。它适用于 5.2.1 版本。自从我切换到 5.5.1 并添加了 Qt webengine。一切都出错了。
  • 请再次仔细检查 SDK。我刚刚编译了一个基于即将发布的 2.1 版本的新 SDK;而这个,以及基于 1.6、1.8 和 2.0 的 SDK 都设置为OE_QMAKE_CXX。但是,在较新的版本中,OE_QMAKE*exports 不是在 environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi 中完成的,而是在由该脚本提供的文件中完成的。有问题的文件是$OECORE_NATIVE_SYSROOT/environment-setup.d/qt5.sh。检查这个是否存在。否则,适用有关 OE 版本等的标准信息请求。
  • 我从 bitbake 编译了另一个 SDK,environment setup 文件是一样的,缺少所有 OE_QMAKE,你知道我应该查看哪个文件吗?
猜你喜欢
  • 1970-01-01
  • 2020-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多