如何使 id3lib 在 C++ Builder 10.2 中工作?

Posted

技术标签:

【中文标题】如何使 id3lib 在 C++ Builder 10.2 中工作?【英文标题】:How to make id3lib works in C++ Builder 10.2? 【发布时间】:2018-05-23 07:08:59 【问题描述】:

如何在 Windows 7 上的 C++ Builder 10.2 中安装这个库? 我从“id3lib-3.8.3 win binaries/debug”复制了 id3lib.dll 并将我的项目 .exe 文件放在文件夹中,然后我通过 ImpLib(使用 -a 选项)创建了 id3lib.lib 并添加到我的项目中。之后,我将标题文件夹(id3)链接到我的项目并写了#include "id3/tag.h"。当我尝试编译时,我得到:

[bcc32 致命错误] globals.h(56): F1003 错误指令:读取消息 以上或win32.readme.first.txt

安装这个库我做错了什么?

【问题讨论】:

您是否按照错误消息中的说明进行操作?阅读win32.readme.first.txt 获取说明。您可能错过了安装中的一个步骤,例如为您的编译器环境配置库的头文件之一。 我没有遵循这些说明,我使用了“id3lib 3.8.3 windows binaries”文件夹中的 .dll。 win32.readme.first.txt 说,我应该使用id3lib/prjid3lib/libprj 自己创建.dll、.lib。 tag.h 中触发错误消息的实际情况是什么? > 56 #error read message above or win32.readme.first.txt 我不是这个意思。显然代码中有一个#error 指令使编译器显示错误消息,但是什么条件 导致编译器首先到达该指令? #error 周围是否有 #if/#endif? “上面的信息”说什么?你不应该让人们不得不去寻找这类信息。 【参考方案1】:

globals.h 的第 56 行有一个 #error 指令:

#ifdef WIN32
#  define LINKOPTION_STATIC         1 //both for use and creation of static lib
#  define LINKOPTION_CREATE_DYNAMIC 2 //should only be used by prj/id3lib.dsp
#  define LINKOPTION_USE_DYNAMIC    3 //if your project links id3lib dynamic
#  ifndef ID3LIB_LINKOPTION
#    pragma message("*** NOTICE *** (not a real error)")
#    pragma message("* You should include a define in your project which reflect how you link the library")
#    pragma message("* If you use id3lib.lib or libprj/id3lib.dsp (you link static) you should add")
#    pragma message("* ID3LIB_LINKOPTION=1 to your preprocessor definitions of your project.")
#    pragma message("* If you use id3lib.dll (you link dynamic) you should add ID3LIB_LINKOPTION=3")
#    pragma message("* to your preprocessor definitions of your project.")
#    pragma message("***")
#    error read message above or win32.readme.first.txt // <-- HERE

如果定义了WIN32 但未定义ID3LIB_LINKOPTION,则编译器会到达#error

正如您在“上面的消息”中看到的,您需要根据您链接到 ID3 库的方式在您的项目中手动定义ID3LIB_LINKOPTION。您还没有这样做,这就是您收到错误的原因。

进入您的项目选项并在条件部分中为ID3LIB_LINKOPTION=3 添加一个条目(因为您使用的是ID3 库的DLL 版本)。或者,在您的 C++ 代码中将 #define ID3LIB_LINKOPTION 3 语句放在 ID3 头文件的任何 #include 语句上方。

此外,请确保使用项目管理器将生成的 id3lib.lib 文件添加到项目中,或者在 C++ 代码中的某处放置 #pragma comment(lib, "id3lib.lib") 指令。

【讨论】:

所以,它编译成功,但是当我添加一个对象时:ID3_Tag myTag("song.mp3"); 我收到错误:** [ilink32 Error] Error: Unresolved external 'ID3_Tag::~ID3_Tag()' referenced from T:\0101 PROG\PLAYER\WIN32\DEBUG\UNIT1.OBJ.** 有什么建议吗?

以上是关于如何使 id3lib 在 C++ Builder 10.2 中工作?的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 应用程序中使用 DLL

将 C++ Builder 移植到 Qt [关闭]

如何在 C++ builder 中渲染 openGL 框架?

如何使 ListView.Builder 的项目出现在屏幕宽度内?

我应该在 Delphi 而不是 C++ Builder 中编写组件吗?如何向组件添加事件?

Borland C++ Builder 6.0的详细说明