2016-10-14 5 views
1

Исходя из фона не C++, я пытаюсь переписать несколько проектов с использованием Qt. Мне нужно создать общую библиотеку, в которой будут размещаться обычно используемые функции «утилиты». Мне не нужен класс, так как все функции будут статичными, поэтому я думал о создании пространства имен, которое будет содержать все функции, но выполнение этого с использованием шаблона общей библиотеки Qt не работает. Это возможно? Если да, может кто-нибудь, пожалуйста, указать мне в правильном направлении?Qt - Общая библиотека, содержащая функции «Утилиты»?

Например, я хочу использовать функции Utils ниже и поместить их в общую библиотеку, чтобы мне не пришлось копировать файлы во все проекты, в которых я хочу их использовать.

Utils.h

#ifndef UTILS_H 
#define UTILS_H 

#include <QtCore> 
#include <QString> 
#include <QDateTime> 
#include <QFileInfo> 

namespace Utils { 
    QString getAppName(); 
    bool stringToBool(const QString &str); 
    QString getFileTimeStamp(); 
    QString getPacketTime(); 
    QString getTodayStamp(); 
} 

#endif // UTILS_H 

Utils.cpp

#include <Helpers/utils.h> 

namespace Utils { 

    QString getAppName() 
    { 
     return QFileInfo(QCoreApplication::applicationFilePath()).baseName(); 
    } 

    bool stringToBool(const QString &str) 
    { 
     return str.contains("1"); 
    } 

    QString getFileTimeStamp() 
    { 
     return QDateTime::currentDateTime().toString("ddhhmmsszzz"); 
    } 

    QString getPacketTime() 
    { 
     return QDateTime::currentDateTime().toString("hh:mm:ss"); 
    } 

    QString getTodayStamp() 
    { 
     return QDateTime::currentDateTime().toString("MMddyy"); 
    } 

} 
+0

Непонятно, почему Qt используется? Какая часть Qt будет использоваться в этой библиотеке? Какую функциональность выполняют эти функции из динамической библиотеки? – AlexanderVX

+0

Поскольку Qt - это среда, которую я использую, чтобы переписать приложение, и я пытаюсь использовать мастер общей библиотеки в среде разработки Qt Creator. – DonJoe

+0

Я вижу, вы добавили код на вопрос. Очень упрощен. 1. Будет существовать зависимость от самой Qt. 2. Если он не будет использоваться более чем одним приложением, я бы даже не попытался создать динамическую библиотеку с Qt. 3. Если он будет использоваться многими независимыми приложениями, но с той же версией Qt, то есть причина для создания динамической библиотеки, если она будет большой и сложной, чтобы удовлетворить всю работу. Если он будет использоваться только одним приложением, вам не потребуется динамическая библиотека. wiki для вас: https://wiki.qt.io/How_to_create_a_library_with_Qt_and_use_it_in_an_application – AlexanderVX

ответ

2

Помимо неудачно включает в заголовок это выглядит код ОК мудр.

Если вы строите это как общую библиотеку, а платформа использует скрытие символов, вам необходимо «экспортировать» функции.

Это обычно делается, имея «экспортный макрос» заголовок, то есть что-то вроде этого

#include <qglobal.h> 

#ifndef UTILS_EXPORT 
# if defined(MAKE_UTILS_LIB) 
    /* We are building this library */ 
# define UTILS_EXPORT Q_DECL_EXPORT 
# else 
    /* We are using this library */ 
# define UTILS_EXPORT Q_DECL_IMPORT 
# endif 
#endif 

То есть то время используется для обозначения символов, которые должны быть видны во время компоновки

#include "utils_export.h" 

namespace Utils { 
    UTILS_EXPORT QString getAppName(); 
} 

.pro файла библиотечного необходимо установить define, инициирующий экспорту часть макро

DEFINES += MAKE_UTILS_LIB=1 
Смежные вопросы