Ответы пользователя по тегу G++
  • Пытаюсь собрать прошивку для stm32. Ошибка "src/core_cm3.c: Assembler messages"?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    g++  ...   src/core_cm3.c src/system_stm32f10x.c -o build/main


    src/core_cm3.c: Assembler messages:
    src/core_cm3.c:447: Error: no such instruction: `mrs %eax,psp'


    На какой системе ты выполняешь сборку, на x86? Тогда чтобы получить код для arm тебе нужен не g++, а какой-нибудь arm-linux-gnueabi-g++.
    Ответ написан
    2 комментария
  • Статическое подключение zlib в .so?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    У меня есть код на C++, который использует zlib. Я хочу на линуксе его скомпилировать в .so библиотеку, но чтобы команда ldd не показывала libz.so или libz.so.1 (чтобы zlib был встроен в .so).

    Ключами линковщика -Bstatic и -Bdynamic можно переключать режим линковки библиотек:
    g++ -shared foo.cc -o libfoo.so -Wl,-Bstatic -lz -Wl,-Bdynamic

    Но если так сделать, то можно заметить, что не всякую статическую библиотеку можно прилинковать к .so, а только такую, объектники которой собраны с флагом -fpic.
    Ответ написан
  • Почему g++ из MinGW-w64 не знает про _beginthread и про conio.h?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    g++ ругается, что не найден файл conio.h. Помимо этого, в файле process.h должно быть объявление функции _beginthread. Об этом написано на microsoft.com.

    MinGW реализует стандарты С/С++ и расширения GNU. micro$oft может написать на своём сайте всё что угодно, это не делает написанное стандартом.

    у которого crt будет слинковано статически

    g++ -static
    См.
    Ответ написан
    Комментировать
  • Существует ли таблица совместимости компиляторов и версий библиотек?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Для gcc и его libstdc++ есть таблица соответствия версии компилятора и версии символов из его библиотеки, а так же описание правил, по которым версии изменяются и вообще всей идеи версионирования ABI: https://gcc.gnu.org/onlinedocs/libstdc++/manual/ab...
    Ответ написан
    Комментировать
  • Почему не компилируется SFML приложение?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    g++ -o app.exe "src\\log.o" "src\\app.o"

    надо добавить что-то типа -lsfml-graphics -lsfml-window -lsfml-system в конец.
    См. https://www.sfml-dev.org/tutorials/2.5/start-linux.php
    Ответ написан
    2 комментария
  • Где найти актуальную версию arm тулчейна?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Видишь ли в чём дело, если ты используешь тулчейн сильно отличный от того, которым собраны библиотеки установленные на устройство, у тебя есть три варианта действий:
    - перестроить и обновить все библиотеки на устройстве.
    - создать отдельную иерархию каталогов /lib, /usr/lib, ... в которые сложить библиотеки (.so) нового тулчейна и тем или иным способом заставить исполняемые файлы собранные новым тулчейном использовать их.
    - линковать свои исполняемые файлы статически.

    В последнем варианте тебе подойдёт почти любой тулчейн, два других варианта -- более замороченные.

    https://elinux.org/Toolchains#Prebuilt_toolchains
    Ответ написан
    Комментировать
  • Как исправить undefined reference to существующей функции?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert

    g++ ... -I/usr/local/include/RHVoice ...
    main.cpp:(.text+0x17): undefined reference to `RHVoice_new_tts_engine'
    main.cpp:(.text+0x27): undefined reference to `RHVoice_get_voices'

    Судя по пути до каталога с заголовками нужно добавить что-то такое: -L/usr/local/lib -lRHVoice. Чтобы узнать точно, нужно посмотреть, куда установилась и как называется библиотека (*.a или *.so) RHVoice.
    Ответ написан
    1 комментарий
  • G++ версий 6-7, собирает не исполняемые файлы, а разделяемые библиотеки. Почему?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    g++ последних версий в linux собирает разделяемые библиотеки, а не исполняемые файлы

    Регулярно собираю g++ (правда не под x86), ничего такого не наблюдаю.

    В /bin большинство софта собрано как разделяемые библиотеки. Ощущение, что я что-то пропустил.

    Это не разделяемые библиотеки, это position-independent executable, исполняемые файлы с релокациями. В дистрибутиве включили -pie по умолчанию, чтобы рандомизировать пользовательское адресное пространство. См. https://wiki.ubuntu.com/Security/Features#Built_as_PIE
    Ответ написан
    Комментировать
  • Проблемы с фукнцией atoi?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Maqsat Batyrqul: atoi -- функция из стандартной библиотеки С, она работает с С-строками. С-строка это последовательность символов в памяти, заканчивающаяся символом конца строки -- символом с кодом 0.
    Написав *temp = s[i], или что то же самое temp[0] = s[i] вы скопировали i-й символ из строки s на первое место в строке temp. Проблема изначального кода в том, что указатель temp не инициализирован, а значит может указывать в любое место в памяти. Т.е. вы скопировали символ в любое место в памяти. Мест в памяти в которые можно записывать существенно меньше, чем мест, в которые записывать нельзя. По счастливому стечению обстоятельств temp в вашей программе указывал в место, в которое записывать нельзя, в результате чего вы видели Segmentation fault при попытке записать туда.
    В отличие от char *temp, запись char temp[2] определяет не указатель, а массив. Массив -- это непрерывный участок памяти. Если массив не константный, в него можно писать. Имя массива в большинстве случаев ведёт себя как указатель на первый элемент массива. Инициализировав массив нулями вы получили два нулевых символа в памяти, в которые можно писать. В цикле вы заменяете первый символ в этом массиве на i-й символ из массива s, второй символ остаётся неизменным -- символом с кодом 0, т.е. символом конца строки. Т.е. массив temp в цикле представляет собой С-строку единичной длины, которую можно передавать на вход atoi.
    Ответ написан
    Комментировать
  • Как скомпилировать програму через gcc/g++ на ARMv6 (Android 2.3.7)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    > какие параметры (аргументы) давать компилятору в командной строке
    никаких, если компилятор собран с bionic в качестве libc, -static в противном случае.
    Ответ написан