0

我正在尝试id3lib在我的项目中使用来获取音频元数据,现在我的项目中只有这一行使用id3lib

我做了#include <id3/tag.h>,然后在我的项目中的某个地方

    ID3_Tag myTag("/home/apoorv/Music/hello.ogg");

并且在尝试编译它时出现错误

❯ ./build.sh
The Meson build system
Version: 0.56.0
Source dir: /home/apoorv/repos/cpp-projects/wxWidgets/MusicPlayer
Build dir: /home/apoorv/repos/cpp-projects/wxWidgets/MusicPlayer/build
Build type: native build
Project name: MusicPlayer
Project version: undefined
Using 'CXX' from environment with value: 'g++'
C++ compiler for the host machine: g++ (gcc 10.2.0 "g++ (GCC) 10.2.0")
C++ linker for the host machine: g++ ld.bfd 2.35.1
Using 'CXX' from environment with value: 'g++'
Host machine cpu family: x86_64
Host machine cpu: x86_64
wx-config found: YES (/usr/bin/wx-config-gtk3) 3.0.5
Run-time dependency WxWidgets found: YES 3.0.5
Build targets in project: 1

Found ninja-1.10.1 at /usr/bin/ninja
Found runner: ['/usr/bin/ninja']
ninja: Entering directory `.'
[3/3] Linking target musicApp
FAILED: musicApp
g++  -o musicApp musicApp.p/src_app.cpp.o musicApp.p/src_frame.cpp.o -Wl,--as-needed -Wl,--no-undefined -pthread -Wl,--start-group -lwx_gtk3u_media-3.0 -lwx_gtk3u_aui-3.0 -lwx_gtk3u_xrc-3.0 -lwx_gtk3u_webview-3.0 -lwx_gtk3u_html-3.0 -lwx_gtk3u_qa-3.0 -lwx_gtk3u_adv-3.0 -lwx_gtk3u_core-3.0 -lwx_baseu_xml-3.0 -lwx_baseu_net-3.0 -lwx_baseu-3.0 -Wl,--end-group
/usr/bin/ld: musicApp.p/src_frame.cpp.o: in function `Frame::Library(wxCommandEvent&)':
/home/apoorv/repos/cpp-projects/wxWidgets/MusicPlayer/build/../src/frame.cpp:495: undefined reference to `ID3_Tag::ID3_Tag(char const*)'
/usr/bin/ld: /home/apoorv/repos/cpp-projects/wxWidgets/MusicPlayer/build/../src/frame.cpp:495: undefined reference to `ID3_Tag::~ID3_Tag()'
/usr/bin/ld: /home/apoorv/repos/cpp-projects/wxWidgets/MusicPlayer/build/../src/frame.cpp:495: undefined reference to `ID3_Tag::~ID3_Tag()'
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
./build.sh: line 12: ./musicApp: No such file or directory

我正在meson用作构建系统,我尝试添加id3lib作为依赖项meson.build但没有运气

project('MusicPlayer', 'cpp')

src = [

  'src/app.cpp',
  'src/frame.cpp',

  ]

wx = dependency('wxwidgets', modules : ['media', 'std', 'aui'])

id3 = dependency('id3lib')

executable('musicApp', src,
  dependencies : [wx, id3])

我仍然收到错误

❯ ./build.sh
The Meson build system
Version: 0.56.0
Source dir: /home/apoorv/repos/cpp-projects/wxWidgets/MusicPlayer
Build dir: /home/apoorv/repos/cpp-projects/wxWidgets/MusicPlayer/build
Build type: native build
Project name: MusicPlayer
Project version: undefined
Using 'CXX' from environment with value: 'g++'
C++ compiler for the host machine: g++ (gcc 10.2.0 "g++ (GCC) 10.2.0")
C++ linker for the host machine: g++ ld.bfd 2.35.1
Using 'CXX' from environment with value: 'g++'
Host machine cpu family: x86_64
Host machine cpu: x86_64
wx-config found: YES (/usr/bin/wx-config-gtk3) 3.0.5
Run-time dependency WxWidgets found: YES 3.0.5
Found pkg-config: /usr/bin/pkg-config (1.7.3)
Found CMake: /usr/bin/cmake (3.18.4)
Run-time dependency id3lib found: NO (tried pkgconfig and cmake)

meson.build:12:0: ERROR: Dependency "id3lib" not found, tried pkgconfig and cmake

A full log can be found at /home/apoorv/repos/cpp-projects/wxWidgets/MusicPlayer/build/meson-logs/meson-log.txt

ERROR: Current directory is not a meson build directory: `/home/apoorv/repos/cpp-projects/wxWidgets/MusicPlayer/build`.
Please specify a valid build dir or change the working directory to it.
It is also possible that the build directory was generated with an old
meson version. Please regenerate it in this case.
./build.sh: line 12: ./musicApp: No such file or directory

我在 Arch Linux 上,我确实id3lib通过pacman.

4

1 回答 1

1

id3lib 不提供包配置 (.pc) 文件(它看起来没有 inittention),您可以按照链接中的说明自行创建它并将其放入 PKG_CONIFG_PATH 但将其作为库查找更简单:

cxx = meson.get_compiler('cpp')
id3 = cxx.find_library('libid3')
  • 在这种情况下,尽管您不能在构建时依赖/检查库版本,只能在代码中。
于 2020-11-05T22:23:17.440 回答