Форум программистов, компьютерный форум CyberForum.ru

подключение библиотек taglib - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.88
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
01.06.2011, 09:48     подключение библиотек taglib #1
Здраствуйте! Не знаю правильно ли ятему назвал. Вот короче какая у меня проблема:
Решил я воспользоваться библиотекой taglib http://developer.kde.org/~wheeler/taglib.html
в папке лежат куча спп и х файлов, наиболее интересный для меня tag.h, вот я и решил сразу его подключить к своему проекту. Закинул всю папку в папку с моим проектом, написал #include <tag.h>, но эта схема не сработала из-за того что класс Tag в нём абстрактный
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
namespace TagLib {
 
  //! A simple, generic interface to common audio meta data fields
 
  /*!
   * This is an attempt to abstract away the difference in the meta data formats
   * of various audio codecs and tagging schemes.  As such it is generally a
   * subset of what is available in the specific formats but should be suitable
   * for most applications.  This is meant to compliment the generic APIs found
   * in TagLib::AudioProperties, TagLib::File and TagLib::FileRef.
   */
 
  class TAGLIB_EXPORT Tag
  {
  public:
 
    /*!
     * Detroys this Tag instance.
     */
    virtual ~Tag();
 
    /*!
     * Returns the track name; if no track name is present in the tag
     * String::null will be returned.
     */
    virtual String title() const = 0;
 
    /*!
     * Returns the artist name; if no artist name is present in the tag
     * String::null will be returned.
     */
    virtual String artist() const = 0;
 
    /*!
     * Returns the album name; if no album name is present in the tag
     * String::null will be returned.
     */
    virtual String album() const = 0;
 
    /*!
     * Returns the track comment; if no comment is present in the tag
     * String::null will be returned.
     */
    virtual String comment() const = 0;
 
    /*!
     * Returns the genre name; if no genre is present in the tag String::null
     * will be returned.
     */
    virtual String genre() const = 0;
 
    /*!
     * Returns the year; if there is no year set, this will return 0.
     */
    virtual uint year() const = 0;
 
    /*!
     * Returns the track number; if there is no track number set, this will
     * return 0.
     */
    virtual uint track() const = 0;
 
    /*!
     * Sets the title to \a s.  If \a s is String::null then this value will be
     * cleared.
     */
    virtual void setTitle(const String &s) = 0;
 
    /*!
     * Sets the artist to \a s.  If \a s is String::null then this value will be
     * cleared.
     */
    virtual void setArtist(const String &s) = 0;
 
    /*!
     * Sets the album to \a s.  If \a s is String::null then this value will be
     * cleared.
     */
    virtual void setAlbum(const String &s) = 0;
 
    /*!
     * Sets the comment to \a s.  If \a s is String::null then this value will be
     * cleared.
     */
    virtual void setComment(const String &s) = 0;
 
    /*!
     * Sets the genre to \a s.  If \a s is String::null then this value will be
     * cleared.  For tag formats that use a fixed set of genres, the appropriate
     * value will be selected based on a string comparison.  A list of available
     * genres for those formats should be available in that type's
     * implementation.
     */
    virtual void setGenre(const String &s) = 0;
 
    /*!
     * Sets the year to \a i.  If \a s is 0 then this value will be cleared.
     */
    virtual void setYear(uint i) = 0;
 
    /*!
     * Sets the track to \a i.  If \a s is 0 then this value will be cleared.
     */
    virtual void setTrack(uint i) = 0;
 
    /*!
     * Returns true if the tag does not contain any data.  This should be
     * reimplemented in subclasses that provide more than the basic tagging
     * abilities in this class.
     */
    virtual bool isEmpty() const;
 
    /*!
     * Copies the generic data from one tag to another.
     *
     * \note This will no affect any of the lower level details of the tag.  For
     * instance if any of the tag type specific data (maybe a URL for a band) is
     * set, this will not modify or copy that.  This just copies using the API
     * in this class.
     *
     * If \a overwrite is true then the values will be unconditionally copied.
     * If false only empty values will be overwritten.
     */
    static void duplicate(const Tag *source, Tag *target, bool overwrite = true);
 
  protected:
    /*!
     * Construct a Tag.  This is protected since tags should only be instantiated
     * through subclasses.
     */
    Tag();
 
  private:
    Tag(const Tag &);
    Tag &operator=(const Tag &);
 
    class TagPrivate;
    TagPrivate *d;
  };
}
я немного погуглил и выяснил что у других людей содержимое этого файла несколько другое и у них всё нормально работает. После этого я нашёл как собрать библотеку и получил в итоге файлы .dll .lib .exp... Вопрос: что нужно сделать, чтобы воспользоваться библиотекой?

вот чё на их сайте написано:
TagLib can be built using the CMake build system.
этот этап я вроде нашёл
TagLib installs a taglib-config and pkg-config file to make it easier to integrate into various build systems. Note that TagLib's include install directory must be included in the header include path. Simply adding <taglib/tag.h> will not work.
нашёл только фаил taglib-config, чё с ним делать беспонтия, вобще это скрипт для баша, а у меня windows...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2011, 09:48     подключение библиотек taglib
Посмотрите здесь:

Подключение библиотек C++
C++ Подключение библиотек
Подключение библиотек C++
Подключение библиотек в Eclipse c++ C++
подключение библиотек C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.06.2011, 10:02     подключение библиотек taglib #2
pito211, А чем пользуешься то хоть?
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
01.06.2011, 10:24  [ТС]     подключение библиотек taglib #3
ну лучше всего мне подходит qt creator но ещё есть vs2008 и 2010. cmake наштомповал кучу vs файликов в каталоге taglib, я недолго думая открыл .sln фаил vs 2010. Поставил Release и нажал ф5. в итоге у меня и появились taglib.dll .lib .exp. Но tag.h остался прежним... Я искал в гугле, но ни у кого таких проблем не возникало, а я раньше не чем таким не поьзовался, поэтому не знаю, может есть какие-нибудь особенности, как эти библиотеки сторонние собирать?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.06.2011, 11:05     подключение библиотек taglib #4
pito211, Судя по объявлению private они используют непрозрачный указатель. Вообще .lib файлы, которые нужны надо добавить в каталог либ в MSVS в настройках проекта... Но лучше почитать документацию по установке как следует.

Добавлено через 3 минуты
Note that TagLib's include install directory must be included in the header include path. Simply adding <taglib/tag.h> will not work.
А вы вообще просто подключаете tag.h... Как-то странно. В MSVS в настройках стоит добавить путь к TagLib инклудам и тогда уже вперед.
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
01.06.2011, 11:15  [ТС]     подключение библиотек taglib #5
на их сайте по поводу установки сказано два слова, нашёл инструкции в инете, там тоже описано как сделать .dll .lib и всё... И дальше написано, что можно пользоваться tag.h, но у меня он ничего не позволяет создавать, так как tag абстрактный класс... ладно я наверно воспользуюсь id3lib, там хоть меннее понятный интерфейс, но зато программы компилируются, тема больше не актуальна

Добавлено через 4 минуты
Цитата Сообщение от ForEveR Посмотреть сообщение
А вы вообще просто подключаете tag.h... Как-то странно. В MSVS в настройках стоит добавить путь к TagLib инклудам и тогда уже вперед.
сначала я папку taglib всю копировал в папку с проектом и подключал через кавычки #include "", а потом копировал эту папку в директорию с mingw и подключал через <>, он видил библиотеку, открывал даже tag.h, а в vs я не знаю как добавлять, да и смысла добавлять такой tag.h нету(
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.06.2011, 12:22     подключение библиотек taglib #6
Ну как хотите... а я разобрался минут за 30 на линуксе...
Итого такой код работает.

C++
1
2
3
4
5
6
7
8
9
#include <taglib/tag.h>
#include <taglib/fileref.h>
#include <iostream>
 
int main()
{
    TagLib::FileRef f("some_m_f.mp3");
    std::cout << f.tag()->artist() << '\n';
}
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
01.06.2011, 13:34     подключение библиотек taglib #7

Не по теме:

Цитата Сообщение от ForEveR Посмотреть сообщение
на линуксе...
тоже мне сравнил я вот OpenSSL под "окошки" собрать не могу уже неделю, а в *nix то любой дурак сможет


Цитата Сообщение от pito211 Посмотреть сообщение
сначала я папку taglib всю копировал в папку с проектом и подключал через кавычки #include ""
Так не делают. Тут собственно есть два выхода. Первый - это положить все в дефолтные каталоги Visual Studio, заголовки к заголовкам, либы к либа. Дефолтные каталоги находятся примерно по таким путям:
Код
C:\Program Files\Microsoft Visual Studio 10.0\VC\include
C:\Program Files\Microsoft Visual Studio 10.0\VC\lib
Соответственно в первую ложить заголовки, во вторую либы.
Второй способ положить все в отдельный каталог и указать этот каталог в опциях проекта. Смысл будет одинаковый. Вопрос только в том, что в первом случае библиотечка будет видна для всех проектов, а во втором - только для конкретного.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2011, 14:09     подключение библиотек taglib
Еще ссылки по теме:

Подключение сторонних библиотек C++
Подключение библиотек в GUI C++
C++ Подключение библиотек

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
01.06.2011, 14:09  [ТС]     подключение библиотек taglib #8
Цитата Сообщение от fasked Посмотреть сообщение
Так не делают. Тут собственно есть два выхода. Первый - это положить все в дефолтные каталоги Visual Studio, заголовки к заголовкам, либы к либа. Дефолтные каталоги находятся примерно по таким путям:
спасибо, но я VS не пользуюсь. После долгого курения мануала я вроде бы начал понимать. Я так понял, что надо пользоваться fileRef и примеры там все вокруг него построены, а не вокруг класса Tag. Правда сейчас он стал выдавать C:/Tag/taglib-1.7/taglib-build-desktop/../taglib/mpeg/id3v2/id3v2framefactory.cpp:68: ошибка: definition of static data member 'TagLib::ID3v2::FrameFactory::factory' of dllimport'd class но это вроде надо чё то в .pro ковырнуть, видал я это в каком то гайде по установке. Надеюсь я на правильном пути
Yandex
Объявления
01.06.2011, 14:09     подключение библиотек taglib
Ответ Создать тему
Опции темы

Текущее время: 12:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru