• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь Ошибка линковки примера Mongoose

r44083

Member
Пытаюсь собрать проект из примеров к Mongoose для ESP8266.
Во время линковки получаю кучу ошибок. Похоже что все они связаны с stdlib.

Вот часть лога билда проекта, где начинается линковка:
Код:
...
- linking...
xtensa-lx106-elf-gcc -Teagle.app.v6.ld -Lsrc/hal/ESP8266_SDK/lib -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static -Wl,--start-group -lcirom -lcrypto -lespconn -lespnow -lfreertos -lgcc -ljson -llwip -lmain -lnet80211 -lnopoll -lphy -lpp -lpwm -lspiffs -lssc -lwpa -lwps -lhal -Wl,--end-group -Wl,-Map="out/lst/ESP8266-rtos-hal.map",--cref out/obj/main.o out/obj/macros.o out/obj/drv_di.o out/obj/xprintf.o out/obj/esp_libc.o out/obj/mongoose.o out/obj/hal_gpio.o out/obj/hal_systick.o out/obj/hal_tim.o -o out/bin/ESP8266-rtos-hal.elf
f:/soft/1-ready/sublimetext/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/5.1.0/../../../../xtensa-lx106-elf/bin/ld.exe: out/bin/ESP8266-rtos-hal.elf section `.text' will not fit in region `iram1_0_seg'
out/obj/mongoose.o: In function `blk0':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:1226: undefined reference to `__moddi3'
out/obj/mongoose.o: In function `c_itoa':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:1510: undefined reference to `__moddi3'
out/obj/mongoose.o: In function `parse_uri_component':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:4809: undefined reference to `__ctype_ptr__'
out/obj/mongoose.o: In function `mg_socket_if_get_conn_addr':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:3768: undefined reference to `snprintf'
out/obj/mongoose.o: In function `mg_hexdump_n':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:9370: undefined reference to `snprintf'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:9372: undefined reference to `snprintf'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:9373: undefined reference to `snprintf'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:9380: undefined reference to `snprintf'
out/obj/mongoose.o:F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:9383: more undefined references to `snprintf' follow
out/obj/mongoose.o: In function `mg_open_listening_socket':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:3266: undefined reference to `fprintf'
out/obj/mongoose.o: In function `mg_socket_if_remove_conn':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:3266: undefined reference to `fprintf'
out/obj/mongoose.o: In function `mg_tun_if_connect_udp':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:3266: undefined reference to `vfprintf'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:3266: undefined reference to `fputc'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:3266: undefined reference to `fflush'
out/obj/mongoose.o: In function `cs_log_print_prefix':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:300: undefined reference to `vfprintf'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:301: undefined reference to `fputc'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:309: undefined reference to `fflush'
out/obj/mongoose.o: In function `cs_base64_encode':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:458: undefined reference to `fputc'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:458: undefined reference to `fputc'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:458: undefined reference to `fputc'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:459: undefined reference to `fputc'
out/obj/mongoose.o: In function `cs_fprint_base64':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:474: undefined reference to `fputc'
out/obj/mongoose.o: In function `cs_base64_decode':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:530: undefined reference to `gettimeofday'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:531: undefined reference to `gettimeofday'
out/obj/mongoose.o: In function `MD5_Final':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:977: undefined reference to `__assert_func'
out/obj/mongoose.o: In function `mbuf_resize':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:1050: undefined reference to `__assert_func'
out/obj/mongoose.o: In function `mbuf_trim':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:1059: undefined reference to `__assert_func'
out/obj/mongoose.o: In function `cs_to_hex':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:1754: undefined reference to `sscanf'
out/obj/mongoose.o: In function `cs_md5':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:992: undefined reference to `sscanf'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:1001: undefined reference to `sscanf'
out/obj/mongoose.o: In function `cs_from_hex':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:1775: undefined reference to `sscanf'
out/obj/mongoose.o: In function `mg_ncasecmp':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:1804: undefined reference to `sscanf'
out/obj/mongoose.o: In function `mg_vcasecmp':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:1148: undefined reference to `vsnprintf'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:1154: undefined reference to `vsnprintf'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:1154: undefined reference to `vsnprintf'
out/obj/mongoose.o: In function `mg_parse_address':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:2367: undefined reference to `vsnprintf'
out/obj/mongoose.o: In function `mg_url_decode':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:6396: undefined reference to `snprintf'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:6397: undefined reference to `sscanf'
out/obj/mongoose.o: In function `mg_http_parse_header':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:6518: undefined reference to `strdup'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:6524: undefined reference to `strdup'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:6522: undefined reference to `atoi'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:6542: undefined reference to `strtoll'
out/obj/mongoose.o: In function `mg_get_http_basic_auth':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:6545: undefined reference to `atoi'
out/obj/mongoose.o: In function `mg_parse_multipart':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:7776: undefined reference to `strtoll'
out/obj/mongoose.o: In function `mg_register_http_endpoint':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:7806: undefined reference to `snprintf'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:7812: undefined reference to `snprintf'
out/obj/mongoose.o: In function `mg_skip':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:9211: undefined reference to `fputs'
out/obj/mongoose.o: In function `mg_parse_http':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:5282: undefined reference to `fputs'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:5295: undefined reference to `fclose'
out/obj/mongoose.o: In function `mg_http_parse_headers':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:5247: undefined reference to `fprintf'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:5250: undefined reference to `fputs'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:5261: undefined reference to `fclose'
out/obj/mongoose.o: In function `mg_call':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:2030: undefined reference to `__assert_func'
out/obj/mongoose.o: In function `mg_if_poll':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:2087: undefined reference to `strerror'
out/obj/mongoose.o: In function `mg_mgr_free':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:2208: undefined reference to `strerror'
out/obj/mongoose.o: In function `mg_mgr_handle_conn':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:3514: undefined reference to `snprintf'
out/obj/mongoose.o: In function `mg_socket_if_poll':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:3649: undefined reference to `rand'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:3678: undefined reference to `rand'
out/obj/mongoose.o: In function `mg_printf_html_escape':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:6497: undefined reference to `sscanf'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:6505: undefined reference to `sscanf'
out/obj/mongoose.o: In function `mg_ws_handler':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:9058: undefined reference to `__assert_func'
out/obj/mongoose.o: In function `mg_match_prefix_n':
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:9494: undefined reference to `rand'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:9498: undefined reference to `rand'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:9498: undefined reference to `rand'
F:\simple_hal\ESP8266-rtos-hal/src/extra-lib/mongoose/mongoose.c:9501: undefined reference to `rand'
collect2.exe: error: ld returned 1 exit status
make[1]: *** [out/bin/ESP8266-rtos-hal.elf] Error 1
make[1]: Leaving directory `F:/simple_hal/ESP8266-rtos-hal'
make: *** [all] Error 2
[Finished in 8.1s with exit code 2]

Makefile прикреплён к теме.

Что может к этому приводить?
 

Вложения

r44083

Member
Да. Вернее встроил ваш пример в свой пустой проект.
Прикрепил архив проекта к теме.
 

Вложения

r44083

Member
Но я не хочу и не могу тянуть весь Mongoose фреймворк/OC. Нужен только вебсервер.
 

r44083

Member
Похоже нам нужно убить этот пример.

Используйте Mongoose OS - reduce IoT firmware development time up to 90%, там мангуст встроен и отлажен.
Может есть некий гайд как можно портировать\настроить Mongoose для ESP8266 ?
Просто на официальном сайте многократно упоминается что Mongoose имеет поддержку(совместимость) ESP8266.
 

pvvx

Активный участник сообщества
Похоже нам нужно убить этот пример.

Используйте Mongoose OS - reduce IoT firmware development time up to 90%, там мангуст встроен и отлажен.
Тоже ничего не выходит, а там написано:

Mongoose OS - сократить время разработки микропрограммного IoT до 90%

С открытым исходным кодом операционной системы для Интернет вещей

Не сокращается время разработки микропрограммного IoT, т.к. установщик лезет в COМ порт к оборудованию, которого не знает, а исходников не дает.
Выходит чистый обман или реклама? :)
Каким образом в ESP8266 влинкуются SSL от Mbed, а так-же стандартные библиотеки printf, eabi и прочее?
Не ясен вообще смысл нашлепки и переиначивания стандартных функций SDK, LwIP и Mbed SSL/TLS. Тем более есть несоответствия версий этих внешних библиотек у разных устройств.
Выходит, чтобы запустить Mongoose OS надо иметь дополнительные (и не малые) ресурсы в устройстве и ещё переписать всю Mongoose OS, совмещая её вызовы к API этих устройств. Это вытекает в дополнительную разработку и цели её не оправдывают средства. Ну ради что только игры в "Mongoose OS", чтобы исчерпать ресурс устройства по RAM/Flash и производительности. :)
 
Последнее редактирование:

r44083

Member
Почему же в наше время сошли на нет простые и надёжные решения для конкретной задачи. Ведь веб сервер должен быть веб сервером, а не совмещать в себе SSL, бутлоадер, фреймворк и что там ещё.
 

pvvx

Активный участник сообщества
Почему же в наше время сошли на нет простые и надёжные решения для конкретной задачи. Ведь веб сервер должен быть веб сервером, а не совмещать в себе SSL, бутлоадер, фреймворк и что там ещё.
А таких решений не было (не существовало) на класс устройств SoC c WiFi имеющих до нескольких мегабайт RAM.
Посмотрите стандартные требования для реализации простого HTTP-Web сервера на линуксе.
LwIP для поддержки http-web-сервера по минимальным стандартам должен иметь свободных от 128 килобайт*... Поэтому забудьте о нормальном Web на ESP8266 и ESP-32S. Это огрызки. Только недобросовестные рекламшики несовместимых реализаций со стандартами, кои тут присутствуют, могут утверждать, что у них есть поддержка web-сервера для ESP.

Что такое OS - описано в викопедии (это API)

* Считается очень просто – TIME_WAIT по стандарту 120 сек. Сколько TCP соединений может отработать web в секунду, столько надо и RAM для выделения на структуры psb LwIP-у с флагом TIME_WAIT. Ну и плюс буфера… В принципе это касается поддержки любого TCP соединения. Проверок на возможность открытия новых соединений в Mongoose нет, да и много чего ещё там нет - один пиар ради игры... :)
 
Последнее редактирование:

lsm

Разработчик Smart.js
Команда форума
Почему же в наше время сошли на нет простые и надёжные решения для конкретной задачи. Ведь веб сервер должен быть веб сервером, а не совмещать в себе SSL, бутлоадер, фреймворк и что там ещё.
Давайте не будем на зеркало пенять.

Мангуст - это веб сервер и ничего в себе не совмещает.

Посмотрите на Makefile в примере, какие либы он подключает через -l ключи, и посмотрите на ваш список либ, сравните и скорее всего прояснится что нужно подключить.

И да, если есть мангуст, то кривой espconn не нужен.

Работающий фреймворк не хотите - разбирайтесь с SDK и линковкой.
 

pvvx

Активный участник сообщества
Работающий фреймворк не хотите - разбирайтесь с SDK и линковкой.
Хотим, но совместимый с другими. А то выходит уже сотни "фреймворков", большинство из которых недоделанные и каждый тянет в свой огород. Унификации вызовов API никакой.
Какие улучшения и отличительные особенности имеет Mongoose от Mbed? Первое сравнение показывает, что отрицательные.
 

lsm

Разработчик Smart.js
Команда форума
LwIP для поддержки http-web-сервера по минимальным стандартам должен иметь свободных от 128 килобайт*... Поэтому забудьте о нормальном Web на ESP8266 и ESP-32S. Это огрызки. Только недобросовестные рекламшики несовместимых реализаций со стандартами, кои тут присутствуют, могут утверждать, что у них есть поддержка web-сервера для ESP.
@pvvx давайте без тонких намеков. имейте смелость выражаться прямо, без "недобросовестных рекламщиков".

насчет того что на esp8266 веб сервер является огрызком - соглашусь.
 

pvvx

Активный участник сообщества
@pvvx давайте без тонких намеков. имейте смелость выражаться прямо, без "недобросовестных рекламщиков".
А как назвать всю ту писанину на сайте, если попытки поставить с него что угодно на примерно одинаковые платформы требует множественных исправлений и дело не одного вечера? (т.е. равно времени адаптации API имеющегося контролера к решаемым задачам без данного фреймворка?
 

lsm

Разработчик Smart.js
Команда форума
Хотим, но совместимый с другими. А то выходит уже сотни "фреймворков", большинство из которых недоделанные и каждый тянет в свой огород. Унификации вызовов API никакой.
Какие улучшения и отличительные особенности имеет Mongoose от Mbed? Первое сравнение показывает, что отрицательные.
Mongoose OS не нравится - разработайте свой! Мы никого не заставляем Mongoose OS использовать. Кому подходит, отлично. Нет - вперед, есть много других решений.
 

lsm

Разработчик Smart.js
Команда форума
А как назвать всю ту писанину на сайте, если попытки поставить с него что угодно на примерно одинаковые платформы требует множественных исправлений и дело не одного вечера?
@pvvx еще раз. Не нравится - не используйте. Писанину на сайте не читайте.
 

pvvx

Активный участник сообщества
Mongoose OS не нравится - разработайте свой! Мы никого не заставляем Mongoose OS использовать. Кому подходит, отлично. Нет - вперед, есть много других решений.
А это и создает каламбур и неразбериху для пользователей. И как следствие возникают подмены понятий. :) И вы являетесь этим источником подмены понятий. Вот и всё недовольство.
 

lsm

Разработчик Smart.js
Команда форума
А это и создает каламбур и неразбериху для пользователей. И как следствие возникают подмены понятий. :) И вы являетесь этим источником подмены понятий. Вот и всё недовольство.
Где конкретно вы увидели подмену понятий?

И зачем вы врете рассказывая что кода установщика нет? Код установщика открыт. Вот он: mongoose-os/mos at master · cesanta/mongoose-os · GitHub

И аргументы у вас если разобраться - часто мелочи всякие, выставляемые как существенные недостатки.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Где конкретно вы увидели подмену понятий?

И зачем вы врете рассказывая что кода установщика нет? Код установщика открыт. Вот он: mongoose-os/mos at master · cesanta/mongoose-os · GitHub
Я действовал как вы указали и написано на сайте - ваша программа полезла в COM порт и начала там шебуршить без разбора что там и как :)
После этого она не дала ничего. Т.е. Mongoose OS не установилась, как было заявлено в рекламе :)
И аргументы у вас если разобраться - часто мелочи всякие, выставляемые как существенные недостатки.
Мир состоит из мелочей. Все ошибки и недочеты в Mongoose OS перечислить я не в состоянии. Довольствуйтесь тем, что указал. :)
Будет мало, когда исправите указанные - добавлю.
 
Последнее редактирование:

lsm

Разработчик Smart.js
Команда форума
Я действовал как вы указали и написано на сайте - ваша программа полезла в COM порт и начала там шебуршить без разбора что там и как :)
После этого она не дала ничего. Т.е. Mongoose OS не установилась, как было заявлено в рекламе :)
Да что вы говорите :) Похоже другие установщики не "шебуршат без разбора" в ком порту, они магией прошивку заливают.

@pvvx не поставили, не нравится - проходите мимо.
 

pvvx

Активный участник сообщества
Да что вы говорите :) Похоже другие установщики не "шебуршат без разбора" в ком порту, они магией прошивку заливают.

@pvvx не поставили, не нравится - проходите мимо.
У нас свободная страна и любят блокировать сайты по требованиям :)

У меня такое дело – находить ошибки. Мелочные, но которые влияют на общую работоспособность. А пока можно поставить 2+ за данный фреймворк.
PS: В Эклипcе у него беда – “много строчек” и без правки установок (расширения числа строк в файле для парсинга) он не обрабатывается. Зачем всё впихнуто в один файл?
 
Сверху Снизу