Неопределенная ссылка `ID3_Tag :: ID3_Tag (char const *)`

Я пытаюсь использовать 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.


person apoorv569    schedule 05.11.2020    source источник


Ответы (1)


id3lib не отправляет файл конфигурации пакета (.pc) (и похоже, что у него нет инициализации ), вы можете создать его самостоятельно, как описано в ссылке, и поместить в PKG_CONIFG_PATH, но проще найти его как библиотеку:

cxx = meson.get_compiler('cpp')
id3 = cxx.find_library('libid3')
  • в этом случае вы не можете полагаться на / проверять версию библиотеки во время сборки, только в коде.
person pmod    schedule 05.11.2020