【问题标题】:Basic compile issue with QT4QT4的基本编译问题
【发布时间】:2010-05-07 04:59:11
【问题描述】:

我一直试图从大学教科书中获得一个简单的列表,以使用我昨晚下载的最新的 Windows 版 QT SDK 进行编译。经过常规的废话(没有make.bat,需要手动添加环境变量等)后,我终于可以构建了。但是这两个库中只有一个似乎可以工作。

我使用的 .pro 文件非常简单:

SUBDIRS += utils \
           dataobjects

TEMPLATE = subdirs

在这两个子文件夹中,我都有一个库的源代码。运行 QMAKE 会生成一个 makefile,运行 Make 会运行所有的预备程序,然后在 g++ 调用上失败:

g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc --out-implib,libdataobjects.a -shared -mthreads -Wl -Wl,--out-implib,c:\Users\Cobus\workspace\lib\libdataobjects.a -o ..\..\lib\dataobjects.dll object_script.dataobjects.Debug  -L"c:\Users\Cobus\Portab~1\Qt\2010.02.1\qt\lib" -LC:\Users\Cobus\workspace\lib -lutils -lQtXmld4 -lQtGuid4 -lQtCored4
c:/users/cobus/portab~1/qt/2010.02.1/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../mingw32/bin/ld.exe: cannot find -lutils

问题似乎就在命令行末尾附近,这里添加了-lutils,说明有一个名为utils的库。虽然我预计会看到这一点,但您会注意到 --out 之后的库名称在名称中包含 lib,因此它们成为 libutils 和 libdataobjects。我试图弄清楚为什么会发生这种情况,但无济于事。

有人知道发生了什么吗?

【问题讨论】:

  • 在 GCC 中,标准使用 -lname 作为 libname 并省略“lib”部分
  • 如果您自动生成 Makefile,如果您只删除 -lutils 部分会发生什么? (通过编辑生成文件)
  • 您的 .pro 文件只是说有两个子目录 utils 和 dataobjects,每个子目录都包含自己的 .pro 文件,其中包含有关如何构建其内容的信息。您还应该提供这些 .pro 文件,以便对您的问题做出有意义的回答。

标签: qt qt4 g++ mingw32


【解决方案1】:

您的.pro 文件使用SUBDIRS 模板,该模板需要一个与每个子目录的目录名称匹配的.pro 文件。您还应该有一个utils\utils.prodataobjects\dataobject.pro 文件。

c:\Users\Cobus\workspace\lib\libdataobjects.a 是否正确构建?如果没有,请检查子目录.pro 文件。

根据您发布的内容,我不希望编译任何内容。您需要子目录 .pro 文件中的目标来构建任何东西。

【讨论】:

    【解决方案2】:

    它们似乎是另一个 pro 文件,因为生成的 Makefile 正在拉取 QtXml,默认情况下不会这样做。

    请检查任何 .pro 或 .pri 文件的子目录。其中一个可以解决您的困惑

    【讨论】:

      猜你喜欢
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 2013-02-25
      • 2021-01-16
      • 1970-01-01
      • 2018-03-19
      • 1970-01-01
      • 2011-09-02
      相关资源
      最近更新 更多