Решение проблем с подключением библиотек *.h

Считаете ли вы, что это информация была полезна для вас?

  • да

    Голосов: 3 75.0%
  • нет

    Голосов: 0 0.0%
  • ничего нового

    Голосов: 1 25.0%

  • Всего проголосовало
    4
  • Опрос закрыт .

Nick_SPb

★✩✩✩✩✩✩
1 Ноя 2018
55
12
Созданию этой темы с подвигло желание помочь тем не многим, у кого возникли проблемы с подключением библиотек...
на примере проекта morse =>>
В общем... есть скетч, воспроизводящий код Морзе, morse.ino, заголовочный файл библиотеки morse.h и файл описания функций morse.cpp.
Берём эти файлы ( morse.h, morse.cpp ) и закидываем в стандартную папку расположения пользовательских библиотек... не забываем создать папку с тем же именем
что и подключаемая библиотека ~~\Мои документы\Arduino\libraries\morse.
И ради эксперимента копируем эти файлы в папку проекта, располагая их рядом с нашим скетчем... ~~\Мои документы\Arduino\morse
Изменив немного файл morse.cpp, расположенный в стандартном каталоге Arduino IDE, а если быть точным, закоментируем описание одной из функций...
Запустив компиляцию скетча, мы видим ошибку ... отсюда следует что по умолчанию, если она существует, Arduino IDE пытается подключить библиотеку из
стандартной директории...
Это происходит при записи в виде:
#include <Morse.h>
Но стоит нам изменить запись на такую: #include "Morse.h", компилятор ищет заголовочные файлы в локальной директории проекта, что можно увидеть на скринах...

Итого...
- Если при установке ZIP библиотеки вылетает ошибка...
- Если вы нашли библиотеку на просторах интернета, или в чужом проекте

==>> Просто копируете файлы .h и .cpp в папку со своим проектом и пользуетесь на радость всем)
При чём, лично я считаю, расположение библиотеки локально лучший вариант... даже если такая библиотека существует в стандартной директории,
она будет игнорироваться ... а подключиться именно та что расположена локально.
Вы всегда можете менять её содержание на своё усмотрение, допустим вырезав всё ненужное из чужой библиотеки...
В общем незнаю пригодиться ли кому эта инфа... ну пару человек уже точно сталкивались с проблемой подключения...)))
Желаю всем удачи, и больше завершённых проектов.
 

Вложения

AnDrOn

✩✩✩✩✩✩✩
15 Мар 2019
4
2
Созданию этой темы с подвигло желание помочь тем не многим, у кого возникли проблемы с подключением библиотек...
на примере проекта morse =>>
В общем... есть скетч, воспроизводящий код Морзе, morse.ino, заголовочный файл библиотеки morse.h и файл описания функций morse.cpp.
Берём эти файлы ( morse.h, morse.cpp ) и закидываем в стандартную папку расположения пользовательских библиотек... не забываем создать папку с тем же именем
что и подключаемая библиотека ~~\Мои документы\Arduino\libraries\morse.
И ради эксперимента копируем эти файлы в папку проекта, располагая их рядом с нашим скетчем... ~~\Мои документы\Arduino\morse
Изменив немного файл morse.cpp, расположенный в стандартном каталоге Arduino IDE, а если быть точным, закоментируем описание одной из функций...
Запустив компиляцию скетча, мы видим ошибку ... отсюда следует что по умолчанию, если она существует, Arduino IDE пытается подключить библиотеку из
стандартной директории...
Это происходит при записи в виде:
#include <Morse.h>
Но стоит нам изменить запись на такую: #include "Morse.h", компилятор ищет заголовочные файлы в локальной директории проекта, что можно увидеть на скринах...

Итого...
- Если при установке ZIP библиотеки вылетает ошибка...
- Если вы нашли библиотеку на просторах интернета, или в чужом проекте

==>> Просто копируете файлы .h и .cpp в папку со своим проектом и пользуетесь на радость всем)
При чём, лично я считаю, расположение библиотеки локально лучший вариант... даже если такая библиотека существует в стандартной директории,
она будет игнорироваться ... а подключиться именно та что расположена локально.
Вы всегда можете менять её содержание на своё усмотрение, допустим вырезав всё ненужное из чужой библиотеки...
В общем незнаю пригодиться ли кому эта инфа... ну пару человек уже точно сталкивались с проблемой подключения...)))
Желаю всем удачи, и больше завершённых проектов.
Привет, у меня вот именно такая же фигня произошла с библиотекой color music и на этом примере я нифига не понял, незнаю я где искать эти два файла, "h" и "cpp" помоги разобраться конкретно на примере со светомузыкой.
 
  • Лойс +1
Реакции: Игорь Bunin

AnDrOn

✩✩✩✩✩✩✩
15 Мар 2019
4
2
залил скеч блинк, все работает, светодтод мигает. Решил, что все можно идти дальше. и тут проблема такая. прочитав статью я нифига не понял, методом тыка тоже ничего не вышло, а если и вышло, то проверить я незнаю как зашла ли прошивка в плату или нет. Перезалил блинк - снова мигает. третий день сижу с этой прошивкой - умане хватает, тыкните носом пожалуйста на примере колор музик....
 

Wan-Derer

★★★★★✩✩
Команда форума
31 Июл 2018
2,003
406
Москва
wan-derer.ru
@AnDrOn, если скетч загрузится, то об этом выводится сообщение. Если нет, выводится ошибка, которую можно забить в поиск и найти решение.
Три дня это мало чтобы разобраться, пытайся ещё.
 

AnDrOn

✩✩✩✩✩✩✩
15 Мар 2019
4
2
скеч залил через Скеч - подключить библиотеку - добавить зип библиотеку. ошибки не было красным цветом. Но... походу руки кривые один хрен)))))
 

AnDrOn

✩✩✩✩✩✩✩
15 Мар 2019
4
2
Дело в том, что если что то не получается - откладываю в сторону, ровно до того момента, пока не появится настроение. я ножи так учился делать)))) спуски не получались. Свой первый нож я убирал в ящик 4 раза, но все таки закончил. сейчас все эти дела занимают максимум час)))
 
  • Лойс +1
Реакции: Плохиш

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
Morse.h и morse.h не всегда "одно и тоже". Надо именно так как назван инклудный файлик. :)
 
  • Лойс +1
Реакции: Плохиш

Ninurta2

✩✩✩✩✩✩✩
15 Окт 2022
2
0
@Nick_SPb,
Но стоит нам изменить запись на такую: #include "Morse.h", компилятор ищет заголовочные файлы в локальной директории проекта, что можно увидеть на скринах...
Забыли добавить, что в файле исходника библиотеки Morse.cpp, который кладем рядом с нашим проектом, надо так же заменить <Morse.h> на "Morse.h"
 

Puma

✩✩✩✩✩✩✩
16 Сен 2021
24
2
Всем доброго времени суток!
Пытался загрузить библиотеки с адресной светодиодной матрицей версии GyverMatrixOS_v 1.12 Ардуино 1.8.15 на Wemos mini...
Компиляция завершена только с 4-го раза и без коментов. Вначале белым текстом писала «Неверная библиотека найдена в C:\Program Files (x86)\Arduino\libraries\3Dprint: нет заголовочных файлов (.h), найденных в C:\Program Files (x86)\Arduino\libraries\3Dprint
Но на 4-м разе прога устала бороться с моим упрямством и завершилась без коментов на черном фоне в логе.
1666971570740.png
А вот загрузка...Пишет "Загрузка завершена", но...
Загрузка завершена с коментами (белым текстом на черном фоне лога):
«Неверная библиотека найдена в C:\Program Files (x86)\Arduino\libraries\3Dprint: нет заголовочных файлов (.h), найденных в C:\Program Files (x86)\Arduino\libraries\3Dprint
...и таких там 10 строк.
1666971601817.png
Из вышеизложенного совсем не понял откуда "Берём эти файлы ( morse.h, morse.cpp ) и закидываем в стандартную папку расположения пользовательских библиотек..."
Как видно в моем случае отсутствует само " <название файла>.h", которое я мог бы скопировать...а есть только "заголовочные файлы"
Прошу помочь бедолаге, который совсем не понимает предложения "закоментируем описание одной из функций ..."
Когда распаковал архив, то акккуратно всунул нераздербаненные папки с файлами из "Libraries" в папку "Libraries", из папки "firmware " в "firmware "
на своем компе:
1666971951152.png
ДРУГИ, HELP!!!
Заранее благодарен за отзывы! Ткните пальцем, бли-ииз... )))
 
  • Лойс +1
Реакции: Nick_SPb

Nick_SPb

★✩✩✩✩✩✩
1 Ноя 2018
55
12
Здравствуйте, вот всё что просит компилятор с расширением .h и .cpp, это и копируете в папку с проектом.
 

Puma

✩✩✩✩✩✩✩
16 Сен 2021
24
2
Здравствуйте, вот всё что просит компилятор с расширением .h и .cpp, это и копируете в папку с проектом.
... спасибо за оперативный отзыв! 🤝 (y)
...только откуда их копировать-то? Т.е. они у меня вместе с архивом скачались, но "засунулись" не в те папки?
 

Nick_SPb

★✩✩✩✩✩✩
1 Ноя 2018
55
12
... спасибо за оперативный отзыв! 🤝 (y)
...только откуда их копировать-то? Т.е. они у меня вместе с архивом скачались, но "засунулись" не в те папки?
Просто поменяйте "...." на <... >
должно всё заработать если устанавливали библиотеку как zip архив.
 

Puma

✩✩✩✩✩✩✩
16 Сен 2021
24
2
"Этот пост читали? ..."
Спасибо за напоминание - да читал, смотрел видео и везде, где надо, ставил на паузу, повторял у себя, потом снова "гайд для новичков" просмотр и снова - пауза, повтор действий у себя, возврат в гайд для новичков...
Wemos установил по инструкции и указал единичку в строке, где нужно указать с какой ардуинкой работаем - "0"с arduini mini, "1" для ESP8266, Wemos...
Кстати, когда открываю файлы с зеленым значком, все время вылазит эта фигня, которая правда через пару секунд исчезает и потом файл открывается:
1667019586723.png
Прошу прощения, а как хоть выглядят файлы, в которых надо менять "... " на <... > ?
Чот там в каждой папке их такая куча с разными значками (или иконками)...и многие не открыть без поиска проги в интернете.
Как эти файлы хоть выглядят-то?
Заранее Вам благодарен!!!!

Вы уж извините чайника...
Вот куда установил:
1667019007352.png
Эти файлы (см. ниже) надо открыть "с помощью проги из интернета" и там исправлять "..." на <...>?:
1667019131595.png
А то у меня такое подозрение, что я не туда забрел и не те файлы пытаюсь открыть... Хотя иду по пути, указанному в коментах в логе...
 
Изменено:

Nick_SPb

★✩✩✩✩✩✩
1 Ноя 2018
55
12
Скиньте ваш скетч, если не получится самостоятельно, я попробую исправить с комментариями, чтобы вы, и другие форумчане, поняли суть проблемы.

Все изменения следует производить только в своём скетче.
 

Puma

✩✩✩✩✩✩✩
16 Сен 2021
24
2
Оформи код соответствующим тэгом
Он немаленький. Надеюсь, меня не забанят...
/*
Скетч к проекту "Адресная матрица"
Гайд по постройке матрицы: https://alexgyver.ru/matrix_guide/
Страница проекта (схемы, описания): https://alexgyver.ru/GyverMatrixBT/
Подробное описание прошивки: https://alexgyver.ru/gyvermatrixos-guide/
Исходники на GitHub: https://github.com/AlexGyver/GyverMatrixBT/
Нравится, как написан код? Поддержи автора! https://alexgyver.ru/support_alex/
Автор: AlexGyver Technologies, 2018
https://AlexGyver.ru/
*/

// GyverMatrixOS
// Версия прошивки 1.12, совместима с приложением GyverMatrixBT версии 1.12 и выше
// 1.12 - поправлен косяк с кнопкой SET на wemos/nodemcu

// ************************ МАТРИЦА *************************
// если прошивка не лезет в Arduino NANO - отключай режимы! Строка 60 и ниже

#define BRIGHTNESS 150 // стандартная маскимальная яркость (0-255)
#define CURRENT_LIMIT 4000 // лимит по току в миллиамперах, автоматически управляет яркостью (пожалей свой блок питания!) 0 - выключить лимит

#define WIDTH 30 // ширина матрицы
#define HEIGHT 15 // высота матрицы
#define SEGMENTS 1 // диодов в одном "пикселе" (для создания матрицы из кусков ленты)

#define COLOR_ORDER GRB // порядок цветов на ленте. Если цвет отображается некорректно - меняйте. Начать можно с RGB

#define MATRIX_TYPE 0 // тип матрицы: 0 - зигзаг, 1 - параллельная
#define CONNECTION_ANGLE 0 // угол подключения: 0 - левый нижний, 1 - левый верхний, 2 - правый верхний, 3 - правый нижний
#define STRIP_DIRECTION 1 // направление ленты из угла: 0 - вправо, 1 - вверх, 2 - влево, 3 - вниз
// при неправильной настрйоке матрицы вы получите предупреждение "Wrong matrix parameters! Set to default"
// шпаргалка по настройке матрицы здесь! https://alexgyver.ru/matrix_guide/

#define MCU_TYPE 1 // микроконтроллер:
// 0 - AVR (Arduino NANO/MEGA/UNO)
// 1 - ESP8266 (NodeMCU, Wemos D1)
// 2 - STM32 (Blue Pill)

// ******************** ЭФФЕКТЫ И РЕЖИМЫ ********************
#define D_TEXT_SPEED 100 // скорость бегущего текста по умолчанию (мс)
#define D_EFFECT_SPEED 80 // скорость эффектов по умолчанию (мс)
#define D_GAME_SPEED 250 // скорость игр по умолчанию (мс)
#define D_GIF_SPEED 80 // скорость гифок (мс)
#define DEMO_GAME_SPEED 60 // скорость игр в демо режиме (мс)

boolean AUTOPLAY = 1; // 0 выкл / 1 вкл автоматическую смену режимов (откл. можно со смартфона)
int AUTOPLAY_PERIOD = 10; // время между авто сменой режимов (секунды)
#define IDLE_TIME 10 // время бездействия кнопок или Bluetooth (в секундах) после которого запускается автосмена режимов и демо в играх

// о поддерживаемых цветах читай тут https://alexgyver.ru/gyvermatrixos-guide/
#define GLOBAL_COLOR_1 CRGB::Green // основной цвет №1 для игр
#define GLOBAL_COLOR_2 CRGB::Orange // основной цвет №2 для игр

#define SCORE_SIZE 0 // размер символов счёта в игре. 0 - маленький для 8х8 (шрифт 3х5), 1 - большой (шрифт 5х7)
#define FONT_TYPE 1 // (0 / 1) два вида маленького шрифта в выводе игрового счёта

// ************** ОТКЛЮЧЕНИЕ КОМПОНЕНТОВ СИСТЕМЫ (для экономии памяти) *************
// внимание! отключение модуля НЕ УБИРАЕТ его эффекты из списка воспроизведения!
// Это нужно сделать вручную во вкладке custom, удалив ненужные функции

#define USE_BUTTONS 0 // использовать физические кнопки управления играми (0 нет, 1 да)
#define BT_MODE 1 // использовать блютус (0 нет, 1 да)
#define USE_NOISE_EFFECTS 1 // крутые полноэкранные эффекты (0 нет, 1 да) СИЛЬНО ЖРУТ ПАМЯТЬ!!!11
#define USE_FONTS 1 // использовать буквы (бегущая строка) (0 нет, 1 да)
#define USE_CLOCK 0 // использовать часы (0 нет, 1 да)

// игры
#define USE_SNAKE 1 // игра змейка (0 нет, 1 да)
#define USE_TETRIS 1 // игра тетрис (0 нет, 1 да)
#define USE_MAZE 1 // игра лабиринт (0 нет, 1 да)
#define USE_RUNNER 1 // игра бегалка-прыгалка (0 нет, 1 да)
#define USE_FLAPPY 1 // игра flappy bird
#define USE_ARKAN 1 // игра арканоид

// ****************** ПИНЫ ПОДКЛЮЧЕНИЯ *******************
// Arduino (Nano, Mega)
#if (MCU_TYPE == 0)
#define LED_PIN 6 // пин ленты
#define BUTT_UP 3 // кнопка вверх
#define BUTT_DOWN 5 // кнопка вниз
#define BUTT_LEFT 2 // кнопка влево
#define BUTT_RIGHT 4 // кнопка вправо
#define BUTT_SET 7 // кнопка выбор/игра

// пины подписаны согласно pinout платы, а не надписям на пинах!
// esp8266 - плату выбирал Wemos D1 R1
#elif (MCU_TYPE == 1)
#define LED_PIN 2 // пин ленты
#define BUTT_UP 14 // кнопка вверх
#define BUTT_DOWN 13 // кнопка вниз
#define BUTT_LEFT 0 // кнопка влево
#define BUTT_RIGHT 12 // кнопка вправо
#define BUTT_SET 15 // кнопка выбор/игра

// STM32 (BluePill) - плату выбирал STM32F103C
#elif (MCU_TYPE == 2)
#define LED_PIN PB12 // пин ленты
#define BUTT_UP PA1 // кнопка вверх
#define BUTT_DOWN PA3 // кнопка вниз
#define BUTT_LEFT PA0 // кнопка влево
#define BUTT_RIGHT PA2 // кнопка вправо
#define BUTT_SET PA4 // кнопка выбор/игра
#endif

// ******************************** ДЛЯ РАЗРАБОТЧИКОВ ********************************
#define DEBUG 0
#define NUM_LEDS WIDTH * HEIGHT * SEGMENTS

#define RUNNING_STRING 0
#define CLOCK_MODE 1
#define GAME_MODE 2
#define MADNESS_NOISE 3
#define CLOUD_NOISE 4
#define LAVA_NOISE 5
#define PLASMA_NOISE 6
#define RAINBOW_NOISE 7
#define RAINBOWSTRIPE_NOISE 8
#define ZEBRA_NOISE 9
#define FOREST_NOISE 10
#define OCEAN_NOISE 11
#define SNOW_ROUTINE 12
#define SPARKLES_ROUTINE 13
#define MATRIX_ROUTINE 14
#define STARFALL_ROUTINE 15
#define BALL_ROUTINE 16
#define BALLS_ROUTINE 17
#define RAINBOW_ROUTINE 18
#define RAINBOWDIAGONAL_ROUTINE 19
#define FIRE_ROUTINE 20
#define IMAGE_MODE 21

#if (MCU_TYPE == 1)
#define FASTLED_INTERRUPT_RETRY_COUNT 0
#define FASTLED_ALLOW_INTERRUPTS 0
#include <ESP8266WiFi.h>
#endif

#include "FastLED.h"
CRGB leds[NUM_LEDS];
String runningText = "";

static const byte maxDim = max(WIDTH, HEIGHT);
byte buttons = 4; // 0 - верх, 1 - право, 2 - низ, 3 - лево, 4 - не нажата
int globalBrightness = BRIGHTNESS;
byte globalSpeed = 200;
uint32_t globalColor = 0x00ff00; // цвет при запуске зелёный
byte breathBrightness;
boolean loadingFlag = true;
byte frameNum;
int gameSpeed = DEMO_GAME_SPEED;
boolean gameDemo = true;
boolean idleState = true; // флаг холостого режима работы
boolean BTcontrol = false; // флаг контроля с блютус. Если false - управление с кнопок
int8_t thisMode = 0;
boolean controlFlag = false;
boolean gamemodeFlag = false;
boolean mazeMode = false;
int effects_speed = D_EFFECT_SPEED;
int8_t hrs = 10, mins = 25, secs;
boolean dotFlag;
byte modeCode; // 0 бегущая, 1 часы, 2 игры, 3 нойс маднесс и далее, 21 гифка или картинка,
boolean fullTextFlag = false;
boolean clockSet = false;

#if (USE_FONTS == 1)
#include "fonts.h"
#endif

uint32_t autoplayTime = ((long)AUTOPLAY_PERIOD * 1000);
uint32_t autoplayTimer;

#include "timerMinim.h"
timerMinim effectTimer(D_EFFECT_SPEED);
timerMinim gameTimer(DEMO_GAME_SPEED);
timerMinim scrollTimer(D_TEXT_SPEED);
timerMinim idleTimer((long)IDLE_TIME * 1000);
timerMinim changeTimer(70);
timerMinim halfsecTimer(500);

#if (USE_CLOCK == 1 && (MCU_TYPE == 0 || MCU_TYPE == 1))
#include <Wire.h>
#include "RTClib.h"

RTC_DS3231 rtc;
// RTC_DS1307 rtc;
#endif

void setup() {
#if (BT_MODE == 1)
Serial.begin(9600);
#endif

#if (MCU_TYPE == 1)
WiFi.setSleepMode(WIFI_NONE_SLEEP);
#endif

#if (USE_CLOCK == 1 && (MCU_TYPE == 0 || MCU_TYPE == 1))
rtc.begin();
if (rtc.lostPower()) {
rtc.adjust(DateTime(F(DATE), F(TIME)));
}
DateTime now = rtc.now();
secs = now.second();
mins = now.minute();
hrs = now.hour();
#endif

// настройки ленты
FastLED.addLeds<WS2812, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
FastLED.setBrightness(BRIGHTNESS);
if (CURRENT_LIMIT > 0) FastLED.setMaxPowerInVoltsAndMilliamps(5, CURRENT_LIMIT);
FastLED.clear();
FastLED.show();
randomSeed(analogRead(0) + analogRead(1)); // пинаем генератор случайных чисел
}

void loop() {
customRoutine();
bluetoothRoutine();
}
 

Nick_SPb

★✩✩✩✩✩✩
1 Ноя 2018
55
12
#include "FastLED.h"....
заменить кавычки на скобки, вот так:
#include <FastLED.h>
Так сделать со всеми библиотеками в коде.
 

Puma

✩✩✩✩✩✩✩
16 Сен 2021
24
2
Простите чайника, не нашел я в библиотеках, где эти файлы, в которых надо менять кавычки "......" на значки <......>
Буду Вам о-очень благодарен, пжл, гляньте ссылку:
...и ткните пальцем.
 
Изменено:
  • Лойс +1
Реакции: Nick_SPb

Nick_SPb

★✩✩✩✩✩✩
1 Ноя 2018
55
12
Не надо править ничего в библиотеках, написал же исправляйте в тексте скетча.
 

Puma

✩✩✩✩✩✩✩
16 Сен 2021
24
2
Но после исправлений везде по тексту скетча ( после #include <FastLED.h> мне встретилось только #include "fonts.h" и #include "timerMinim.h") и после компиляции сразу выдало ошибки (строки с ошибками выделились коричневым фоном):
1667067522486.png
и
1667067546878.png
После возврата от значков <...> к кавычкам компиляция завершилась без указания на эти ошибки:
1667067758673.png
 

Nick_SPb

★✩✩✩✩✩✩
1 Ноя 2018
55
12
Ясно, Алекс обновляет библиотеки, и старые проекты могут не работать. Попробуйте на гитхаб скачать старую версию библиотеки FastLED.h

Вот он указывает что внешние библиотеки нужно заменить.

Качайте этот архив, распакуйте его.


GyverMatrixBT-master.zip

из папки: libraries /ESP, ARDUINO/
скопируйте все папки, в директорию со своим проектом.
 

Вложения

Puma

✩✩✩✩✩✩✩
16 Сен 2021
24
2
Здравствуйте! Осталась неделя до Нового года, а я все никак не могу своим внукам подготовить подарок...(((
Други, помогите, пжл!
И вот снова на экране перед нажатием на "(зеленый значок ардуино)"GuverMatrixOS_v1.12.ino появляется сообщение:
1671897362965.png
которое исчезает через некот время. А после компиляции вновь появляется «Неверная библиотека найдена в…»
Но я же вставил все вроде туда, куда нужно - в "Этот компьютер > Windows (C) > Program Files (X86) > Arduino > libraries
1671897763501.png
Мож, вся загвоздка в первом принтскрине? Почему пишет библиотека "ESP, ARDUINO" не может быть использована, ведь она же находится в своей папке! Или не в своей? Но я же как скачал, так и все скопом и вставил в одну папку...
Использую контроллер Wemos и в настройках тоже его установил:
1671898714929.png
Плату Wemos прошиваю (вернее пытаюсь) отдельно, когда она подключена только к компу, и все "ноги" у нее абсолютно "не заняты".
Понимаю, что можете отослать к "смотри гайд для новичков", но там я постоянно...)))
Заранее Вам благодарен!
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Ей не нравиться, что вы назвали папку библиотеки "ESP,ARDUINO"
А точнее запятая там.
И если уж быть точным, то не может быть такой библиотеки с таким именем.