2016-02-18 10 views
1

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

мой файл .pro

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 = app 


SOURCES += 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. Пожалуйста, помогите

ответ

4

Связывание против статической библиотеки и с помощью «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 

Удачи вам!

0

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

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

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

Вы можете иметь more examples about how to configure your .pro file in order to link to libmediainfo.dylib, в зависимости от того, где libmediainfo.dylib в вашей системе.

+0

oops забыл упомянуть, что я на OS X, также libmediainfo находится в/usr/local/lib – Neal

+0

Я видел его («.dylib»). В этом примере .pro также работает для Mac OS X. Вы можете использовать LIBS + = -lmediainfo (например, если нет pkg-config), но он менее портативен. –

+0

Прошу прощения, но вы прокрутили право? эта вещь не говорит о слове код – Neal