libmediainfo: неопределенные ошибки в проекте qt5

Я пытаюсь использовать libmediainfo с моим проектом qt5 и получаю следующую ошибку

Undefined symbols for architecture x86_64:
"MediaInfoLib::MediaInfo::Open(std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&)", referenced from:
MainWindow::on_dupeslistWidget_itemClicked(QListWidgetItem*) in mainwindow.o
"MediaInfoLib::MediaInfo::Option(std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&)", referenced from:
MainWindow::on_dupeslistWidget_itemClicked(QListWidgetItem*) in mainwindow.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [VideoTwin.app/Contents/MacOS/VideoTwin] Error 1
19:56:12: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project VideoTwin (kit: default)
When executing step "Make"

мой профайл

QT       += core gui
QT += sql
QT += concurrent
QT += multimedia multimediawidgets

INCLUDEPATH += /usr/local/include /usr/local/Cellar/opencv3/3.1.0_1/include/ $$[QT_INSTALL_PREFIX]/src/3rdparty/sqlite
LIBS += -L/usr/local/Cellar/opencv3/3.1.0_1/lib -L/usr/local/lib -lmediainfo -lzen -lz -lpthread -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_cvv -lopencv_dnn -lopencv_dpm -lopencv_fuzzy -lopencv_line_descriptor -lopencv_optflow -lopencv_plot -lopencv_reg -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_rgbd -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_face -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ximgproc -lopencv_calib3d -lopencv_features2d -lopencv_flann -lopencv_xobjdetect -lopencv_objdetect -lopencv_ml -lopencv_xphoto -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_photo -lopencv_imgproc -lopencv_core

QMAKE_CXXFLAGS += -D_UNICODE -DUNICODE
QMAKE_CFLAGS += -D_UNICODE -DUNICODE

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = VideoTwin
TEMPLATE = appSOURCES += main.cpp\
mainwindow.cpp \
preferencsedialog.cpp \
myqlistwidget.cpp \
$$[QT_INSTALL_PREFIX]/src/3rdparty/sqlite/sqlite3.c \
matchpair.cpp

HEADERS  += mainwindow.h \
preferencsedialog.h \
myqlistwidget.h \
matchpair.h

FORMS    += mainwindow.ui \
preferencsedialog.ui

RESOURCES += \
resources.qrc

в моем заголовочном файле

#include <MediaInfo/MediaInfo.h>

и соответствующий раздел из CPP

MediaInfoLib::MediaInfo media_info;
media_info.Option(L"Internet",L"No");
media_info.Open(item->data(Qt::UserRole + FilepathRole).toString().toStdWString());
QString temp = QString::fromWCharArray( media_info.Inform().c_str(),media_info.Inform().length());
ui->video_info->setText(temp);
ui->video_info->show();

Я не уверен, где проблема. У меня есть libmediaplayer.dylib в каталоге / usr / local / lib. Пожалуйста помоги

1

Решение

Связывание со статической библиотекой и использование заголовочного файла «dll» помогли мне:

Поместите это в ваш исходный код

#include "MediaInfoDLL/MediaInfoDLL_Static.h"using namespace MediaInfoDLL;

Это содержимое файла .pro

QT += core
QT -= gui

TARGET = QtTestMediaInfo
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp

# Adjust this to where you put the source code of MediaInfo
MEDIA_INFO_DIR=~/Downloads/MediaInfo_CLI_GNU_FromSource

#INCLUDEPATH += $${MEDIA_INFO_DIR}/ZenLib/Source
INCLUDEPATH += $${MEDIA_INFO_DIR}/MediaInfoLib/Source
LIBS += -L$${MEDIA_INFO_DIR}/MediaInfoLib/Project/GNU/Library -lmediainfo
LIBS += -L$${MEDIA_INFO_DIR}/ZenLib/Project/GNU/Library -lzen -lz

Удачи!

5

Другие решения

Вы не говорите Qt, где находится libmediainfo.dylib, поэтому Qt не находит его.

Вам нужно добавить его в ваш .pro файл, например:

LIBS += $$system(pkg-config --libs libmediainfo)

Вы можете иметь больше примеров о том, как настроить ваш .pro файл для ссылки на libmediainfo.dylib, в зависимости от того, где находится libmediainfo.dylib в вашей системе.

0

По вопросам рекламы [email protected]