【问题标题】:Build a QT program from command line从命令行构建 QT 程序
【发布时间】:2019-09-13 13:18:47
【问题描述】:

我知道这个问题已经被问过了,但是我遇到了一个我在其他地方没有见过的问题。

我正在尝试通过 JenkinsFile 在 Jenkins 上自动构建 QT 程序。 所以我想在命令行中构建这个程序。

在 Qt Creator 上,一切正常,生成了我的 makefile 并编译了程序。

但是当我在终端(cmd 和 cygwin)上手动键入在 Qt 中执行的确切命令时,编译失败。 错误通常是ld: cannot find -lXXXXXX

我的猜测是这是一个环境问题,所以我尝试在$PATH$LIBRARY_PATH$LD_LIBRARY_PATH 变量中添加一些库路径,但这并不能解决问题。错误就变成了Undefined reference to ___XXXXXX

我希望能在这个问题上提供一些帮助!

谢谢。

编辑

构建(从)机器是Windows 7。这是Qt中编译阶段的屏幕截图(工作正常)。我尝试在终端中输入的命令与屏幕截图上的蓝线完全相同。 (抱歉有些行是用法语写的)

【问题讨论】:

  • 在Jenkins系统上,你是否安装了所有需要的库的开发包?以及它们的正确版本?它们是安装在标准系统位置(例如/usr/lib/ 或类似位置)还是自定义位置?对于自定义位置,您是否在构建系统中添加了标志以查找库?
  • 实际上,我没有检查 Jenkins 上的所有配置是否正确。但我的问题并不特定于詹金斯。也许我在第一篇文章中并不是很清楚......我的 Jenkins 工作多次失败,所以我决定直接在终端的从机上编译我的程序(不使用 Jenkins)。这是我遇到这个问题的地方。所以我不认为它与 Jenkins 配置有关(也许我稍后会检查它,但现在我只想在我的构建机器上编译我的程序)!希望这更清楚
  • 当我说“Jenkins 系统”时,我的意思是“你运行 Jenkins 的 机器”,我并不是要暗示使用 Jenkins 本身。无论如何,我之前评论中的问题仍然存在,因为一旦您可以从命令行正确构建,您也应该能够使用自动化系统(如 Jenkins)来构建。
  • 哦,好吧,我误会了……为了回答您的问题,我猜想安装了所需库的正确版本,因为 Qt 上没有编译问题。我想如果他们不在那里,它也会在 Qt 上失败,不是吗? “添加标志”是什么意思?感谢您的帮助

标签: qt jenkins cmd makefile path


【解决方案1】:

根据错误消息ld: cannot find -lXXXXXX 和环境变量,我假设您正在Linux/Unix 中编译。现在,如果您使用 g++ 进行编译,环境变量 $PATH$LIBRARY_PATH$LD_LIBRARY_PATH 不会对查找库产生任何影响。您可以尝试的是编译器的 -L 参数告诉它库的位置,我的意思是:

g++ -L /path/to/libXXXXX.so -l XXXXX -o result source.cpp

【讨论】:

  • 实际上不,这台机器是 Windows 7(我编辑了我的第一篇文章并进行了一些解释)。但是我尝试使用 cygwin 作为使用 linux 命令的终端
  • 那么你的编译器就是mingw。了解这一点很重要,因为您要求的是命令行语法。无论如何,“-L”参数也适用,但库应该是 DLL 文件而不是这样。 Here 是一些关于 mingw 库位置的文档。
猜你喜欢
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 2018-10-28
  • 2012-01-21
  • 2013-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多