2

我为我的项目使用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. 从编译器那里得到了大量的抱怨

提前感谢,任何提示!

4

3 回答 3

2

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

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

于 2012-08-15T08:12:31.163 回答
1

您的 .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. 在您的项目文件中,我没有看到类似-lsthgbut的内容-id3

于 2012-08-15T03:09:12.630 回答
0

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

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

我在 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 编译的源代码无法与 microsoft visual 生成的库链接工作室因为不同的 ABI

于 2012-08-21T08:44:24.357 回答