如何使 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/prj
和id3lib/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++ builder 中渲染 openGL 框架?
如何使 ListView.Builder 的项目出现在屏幕宽度内?