【问题标题】:Qt migrating code from Linux to WindowsQt 将代码从 Linux 迁移到 Windows
【发布时间】:2012-08-11 07:27:32
【问题描述】:

我在我的项目中使用id3Tag 库。我在 Linux 上成功设置了头文件和库,并且编译没有问题,但是将代码移动到 Windows 时遇到了一些麻烦。 (我才开始学习Windows,对于我可能的无知,请提前道歉)。 我的环境是Qt Creator

问题出在 id3 标记库的标头上(Linux 上没有此类问题!)我的 .pro 文件是:

我的错误是:

如果我不包含该标头“id3/tag.h”,它将完美编译。 可能是什么原因?实际上我还没有为 Windows 编程过。
我的步骤是:
1.我为Linux编译了部分代码
2.将Linux下成功编译的源代码复制到Windows的文件夹(头文件位于当前文件夹中)。
3. 编译后的代码没有那个头文件(“id3/tag.h”)。
4.添加了该标题(“id3/tag.h”)
5. 收到大量来自编译器的抱怨

提前感谢您的任何提示!

【问题讨论】:

  • 只是猜测:不应该是LIBS += -lid3 而不是-id3?因为是LIBS += -l<libraryname> -L<librarypath>
  • 不不,它甚至没有达到链接阶段。它在编译阶段失败。顺便说一句,我试过 - 不幸的是没有
  • 编译错误中有两个重要提示:您应该阅读 win32.readme.first.txt 并且应该在您的 .pro 文件中添加预处理器定义(使用DEFINES +=

标签: c++ windows linux qt porting


【解决方案1】:

您应该更仔细地阅读编译器的消息。它说要阅读 win32.readme.first.txt,所以我建议你 read it 并将你的构建环境设置为你想要链接库的方式。

因为没有设置 ID3LIB_LINKOPTION 导致编译失败,导致头部没有定义 ID3_CPP_EXPORT。但是,这是初始化 ID3_Frame 所必需的。有关详细信息,请参阅 id3\globals.h。

【讨论】:

    【解决方案2】:

    您的 .pro 文件中的分隔符(Windows 上的“\”和 Linux 上的“/”)可能存在问题。所以在你的项目文件中试试这个:

    #TEMPLATE, CONFIG, HEADERS, ...
    
    win32 { # For Windows
        # Leave an empty line because of the backslash at the end of the variable
        SEPARATOR = \\
    
    }
    
    linux-g++ { # For Linux
        SEPARATOR = /
    }
    
    ID3_FOLDER = .$${SEPARATOR}idlib$${SEPARATOR}id3lib-3.8.3$${SEPARATOR}
    
    LIBS += -id3 -L$${ID3_FOLDER}src$${SEPARATOR}.libs
    
    INCLUDEPATH += $${ID3_FOLDER}include $${ID3_FOLDER}src$${SEPARATOR}.libs
    

    编辑:这是关于你图书馆的旗帜。如果包含它的文件在 Windows 上称为 myLib.dll(或在 Linux 上称为 myLib.so),则应编写 -lmyLib。在您的项目文件中,我没有看到像 -lsthg 而是 -id3 这样的东西。

    【讨论】:

      【解决方案3】:

      感谢您的回复! 我根据需要标记了其中一个答案 我添加了这个答案以澄清我到底遇到了什么样的问题。

      我为解决问题所做的一切:

      我在 main.cpp 中定义(所有程序都被控制的带有源代码的主文件)

          #define ID3LIB_LINKOPTION 3
          #define ID3_CPP_EXPORT 1
      

      在那之后我遇到了将近 42 个错误,但幸运的是,它们是新的。

      仅凭直觉(也许)我才发现出了什么问题,因为互联网上充斥着此类类型错误,但它们并没有说明问题的原因。

      我在 main.cpp 中定义了头文件 windows.h(但它必须在任何其他头文件之前,否则会出现无数错误,谁能想到!)

      所以,你的 main.cpp 文件的第一行应该是这样的:

          #define ID3LIB_LINKOPTION 3
          #define ID3_CPP_EXPORT 1
          #include <windows.h>
          #include "id3/tag.h"
      

      而且效果很好。希望有一天这会对某人有所帮助。

      不要尝试使用 QtCREATOR 中的那个库!!!! 只有VS studio c++,我花了很多时间尝试用Mingw编译器编译它,但是用Mingw编译的源代码由于ABI不同,无法与microsoft visual studio生成的库链接

      【讨论】:

      • 虽然你可以把这个定义放在源代码中,但更常见的方法是使用编译器选项来添加定义。如果你使用 gcc 这可以通过 -D 选项指定,msvc 有 /D 选项。
      猜你喜欢
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      • 2014-09-09
      • 1970-01-01
      • 2014-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多