Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.88
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
#1

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

01.06.2011, 09:48. Просмотров 2219. Ответов 7
Метки нет (Все метки)

Здраствуйте! Не знаю правильно ли ятему назвал. Вот короче какая у меня проблема:
Решил я воспользоваться библиотекой 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...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2011, 09:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подключение библиотек taglib (C++):

Подключение библиотек - C++
Доброго времени суток %username% !!! Изучаю С++ не очень долго и возник такой вопрос. Необходимо подключить библиотеку &lt;string&gt; в класс....

Подключение библиотек - C++
Здравствуйте! Проблема: не могу подключить новые библиотеки! Имею VS 2010 Ultimate ! кликаю: сервис-&gt;параметры-&gt;проекты и...

Подключение библиотек - C++
Здравствуйте ув. форумчане.Я пишу программы c++ на notepad++.Возможно ли добавить библиотеки такие как sfml,opengl,и т.д ?Про visual studio...

подключение библиотек - C++
доброго времени суток #pragma comment(lib, &quot;GLU32.lib&quot;) как понять из какой папки программа будет брать данную библиотеки, тоесть из...

Подключение библиотек - C++
c:\documents and settings\admin\рабочий стол\compressed_matrix\compressed_matrix\main.cpp(4) : fatal error C1083: Не удается открыть файл...

Подключение библиотек - C++
Здравствуйте. Подскажите пожалуйста почему при попытке подключить к программе библиотеки &lt;stdlib.h&gt; и &lt;conio.h&gt; выдаётся ошибка (выдаётся...

7
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,544
Завершенные тесты: 3
01.06.2011, 10:02 #2
pito211, А чем пользуешься то хоть?
1
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
01.06.2011, 10:24  [ТС] #3
ну лучше всего мне подходит qt creator но ещё есть vs2008 и 2010. cmake наштомповал кучу vs файликов в каталоге taglib, я недолго думая открыл .sln фаил vs 2010. Поставил Release и нажал ф5. в итоге у меня и появились taglib.dll .lib .exp. Но tag.h остался прежним... Я искал в гугле, но ни у кого таких проблем не возникало, а я раньше не чем таким не поьзовался, поэтому не знаю, может есть какие-нибудь особенности, как эти библиотеки сторонние собирать?
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,544
Завершенные тесты: 3
01.06.2011, 11:05 #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 инклудам и тогда уже вперед.
1
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
01.06.2011, 11:15  [ТС] #5
на их сайте по поводу установки сказано два слова, нашёл инструкции в инете, там тоже описано как сделать .dll .lib и всё... И дальше написано, что можно пользоваться tag.h, но у меня он ничего не позволяет создавать, так как tag абстрактный класс... ладно я наверно воспользуюсь id3lib, там хоть меннее понятный интерфейс, но зато программы компилируются, тема больше не актуальна

Добавлено через 4 минуты
Цитата Сообщение от ForEveR Посмотреть сообщение
А вы вообще просто подключаете tag.h... Как-то странно. В MSVS в настройках стоит добавить путь к TagLib инклудам и тогда уже вперед.
сначала я папку taglib всю копировал в папку с проектом и подключал через кавычки #include "", а потом копировал эту папку в директорию с mingw и подключал через <>, он видил библиотеку, открывал даже tag.h, а в vs я не знаю как добавлять, да и смысла добавлять такой tag.h нету(
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,544
Завершенные тесты: 3
01.06.2011, 12:22 #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';
}
1
fasked
Эксперт С++
4948 / 2528 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
01.06.2011, 13:34 #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
Соответственно в первую ложить заголовки, во вторую либы.
Второй способ положить все в отдельный каталог и указать этот каталог в опциях проекта. Смысл будет одинаковый. Вопрос только в том, что в первом случае библиотечка будет видна для всех проектов, а во втором - только для конкретного.
1
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
01.06.2011, 14:09  [ТС] #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 ковырнуть, видал я это в каком то гайде по установке. Надеюсь я на правильном пути
0
01.06.2011, 14:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2011, 14:09
Привет! Вот еще темы с ответами:

Подключение своих библиотек - C++
Ошибка: не удается открыть источник файл &quot;mystruct.h&quot;. Все бы ничего, если бы не написал библиотеку, но я написал. MYSTRUCT.H ...

Подключение неиспользуемых библиотек - C++
Что будет, если я подключаю библиотеки, но не использую их. Какие последствия?) снизили балл за такое незнание на лабе:D

Подключение сторонних библиотек - C++
Я пишу в Visual Studio и в некоторый проектах использую SDL. У меня есть папка с библиотеками и инклудами SDL, я ее подключаю в...

Подключение библиотек include - C++
подскажите как включить include библиотеки (iostream,conio i t.d)


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru