не удается найти SXMPMeta в Adobe XMP SDK

Я пытаюсь написать простую Приложение Qt Widget что позволяет мне читать и писать файлы .XMP, используя Qt framework && Adobe XMP SDK на OS X 10.10.

Я новичок и ни в коем случае не профессионал в C ++ (и иметь базовые / промежуточные знания самообучения C ++ и Qt, что означает, что я зависим от Google, когда пытаюсь что-то сделать, и иногда в конечном итоге использую вредные привычки или код, который можно упростить)

  1. Я скачал и собрал XMP SDK от Adobe и собрал часть примеров

(по той или иной причине я не смог построить другие, но сейчас это не так важно).

  1. Я построил статическая 64-битная версия библиотек (libXMPCoreStatic.a && libXMPFilesStatic.h)

  2. Вместе с папкой include из общей папки я поместил их в свой Проект приложения Qt Widgetпапка в подпапку Фреймворк

  3. Я связал библиотеки с моим проектом (в моем файле .pro):

    LIBS += -L$$PWD/XMPFramework/ -lXMPCoreStatic
    LIBS += -lXMPFilesStatic
    
    INCLUDEPATH += $$PWD/XMPFramework/include/
    DEPENDPATH += $$PWD/XMPFramework/
    
    PRE_TARGETDEPS += $$PWD/XMPFramework/libXMPCoreStatic.a
    PRE_TARGETDEPS += $$PWD/XMPFramework/libXMPFilesStatic.a
    
  4. Я включил XMP в свое приложение (базовое приложение только для тестирования, если я могу подключиться и использовать некоторые основы XMP SDK) — mainwindow.cpp:

    #include "mainwindow.h"#include "ui_mainwindow.h"#include <cstdio>
    #include <string>
    #include <cstring>
    
    #define MAC_ENV 1 //don't know why, but when I don't explicitly
    //define this, then the app won't build
    
    // Must be defined to instantiate template classes
    //#define TXMP_STRING_TYPE std::string
    
    //when used, I get whole range of errors, there's a sample at the end of the question
    
    // Must be defined to give access to XMPFiles
    #define XMP_INCLUDE_XMPFILES 1
    
    #include <XMP.incl_cpp> //XMP INCLUDE
    #include <XMP.hpp>      //XMP INCLUDE
    
    MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
    {
    ui->setupUi(this);//this if is taken from the sample code
    //for the SDK, the problem is that
    //my project does not know the SXMPMeta
    //but seems to know at least part of the SDK
    //because at least part of the classes and methods
    //are visible through the intellisense
    if(!SXMPMeta::Initialize())
    {
    //the project does not react to SXMPMeta
    //and does not know it, even though the
    //XCode project I've built from the SDK's samples
    //seems to be ok
    ...
    }
    }
    
    ...the rest omitted for brevity...
    

    Вы видите некоторые ошибки, которые я сделал, или причина, по которой класс SXMPMeta отсутствует?


Пример ошибок, которые я получаю, когда пытаюсь использовать #define TXMP_STRING_TYPE std::string, Я думаю, что это как-то связано с инициализацией шаблонных классов XMP

Undefined symbols for architecture x86_64:
"_CFBundleCopyExecutableArchitectures", referenced from:
XMP_PLUGIN::IsValidLibrary(std::string const&) in libXMPFilesStatic.a(OS_Utils_Mac.o)
"_CFBundleCopyResourceURL", referenced from:
XMP_PLUGIN::GetResourceDataFromModule(__CFBundle*, std::string const&, std::string const&, std::string&) in libXMPFilesStatic.a(OS_Utils_Mac.o)
"_CFBundleCreate", referenced from:
XMP_PLUGIN::IsValidLibrary(std::string const&) in libXMPFilesStatic.a(OS_Utils_Mac.o)
XMP_PLUGIN::LoadModule(std::string const&, bool) in libXMPFilesStatic.a(OS_Utils_Mac.o)
"_CFBundleGetFunctionPointerForName", referenced from:
XMP_PLUGIN::GetFunctionPointerFromModuleImpl(__CFBundle*, char const*) in libXMPFilesStatic.a(OS_Utils_Mac.o)
"_CFBundleIsExecutableLoaded", referenced from:
XMP_PLUGIN::LoadModule(std::string const&, bool) in libXMPFilesStatic.a(OS_Utils_Mac.o)
"_CFBundleLoadExecutableAndReturnError", referenced from:
XMP_PLUGIN::LoadModule(std::string const&, bool) in libXMPFilesStatic.a(OS_Utils_Mac.o)
"_CFDataGetBytes", referenced from:
XMP_PLUGIN::GetResourceDataFromModule(__CFBundle*, std::string const&, std::string const&, std::string&) in libXMPFilesStatic.a(OS_Utils_Mac.o)
"_CFNumberGetValue", referenced from:
XMP_PLUGIN::GetResourceDataFromModule(__CFBundle*, std::string const&, std::string const&, std::string&) in libXMPFilesStatic.a(OS_Utils_Mac.o)
"_CFRelease", referenced from:
XMP_PLUGIN::IsValidLibrary(std::string const&) in libXMPFilesStatic.a(OS_Utils_Mac.o)
XMP_PLUGIN::LoadModule(std::string const&, bool) in libXMPFilesStatic.a(OS_Utils_Mac.o)
XMP_PLUGIN::UnloadModule(__CFBundle*, bool) in libXMPFilesStatic.a(OS_Utils_Mac.o)
XMP_PLUGIN::GetFunctionPointerFromModuleImpl(__CFBundle*, char const*) in libXMPFilesStatic.a(OS_Utils_Mac.o)
XMP_PLUGIN::GetResourceDataFromModule(__CFBundle*, std::string const&, std::string const&, std::string&) in libXMPFilesStatic.a(OS_Utils_Mac.o)
"_CFStringCreateWithCString", referenced from:
XMP_PLUGIN::GetFunctionPointerFromModuleImpl(__CFBundle*, char const*) in libXMPFilesStatic.a(OS_Utils_Mac.o)
XMP_PLUGIN::GetResourceDataFromModule(__CFBundle*, std::string const&, std::string const&, std::string&) in libXMPFilesStatic.a(OS_Utils_Mac.o)
"_CFURLCreateDataAndPropertiesFromResource", referenced from:
XMP_PLUGIN::GetResourceDataFromModule(__CFBundle*, std::string const&, std::string const&, std::string&) in libXMPFilesStatic.a(OS_Utils_Mac.o)
"_CFURLCreateFromFileSystemRepresentation", referenced from:
XMP_PLUGIN::IsValidLibrary(std::string const&) in libXMPFilesStatic.a(OS_Utils_Mac.o)

When executing step 'Make'

2

Решение

TXMPFiles это шаблон. SXMPFiles является TXMPFiles<std::string>, Следующий код присутствует в начале одного из примеров XMP Toolkit 2016.07:

// Must be defined to instantiate template classes
#define TXMP_STRING_TYPE std::string

// Must be defined to give access to XMPFiles
#define XMP_INCLUDE_XMPFILES 1

// Ensure XMP templates are instantiated
#include "public/include/XMP.incl_cpp"
// Provide access to the API
#include "public/include/XMP.hpp"
0

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


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