Задать вопрос
Ответы пользователя по тегу G++
  • Как подключить SDL к проекту C++?

    @Mercury13
    Программист на «си с крестами» и не только
    SDL3, MSYS…

    Обнови MSYS (SDL3 появился недавно)
    pacboy update (найди, какая там команда у pacman)

    pacboy sync sdl3:x
    (для pacman командную строку придумай сам)

    Вот CMake для первого примера SDL3
    cmake_minimum_required(VERSION 3.16)
    
    project(SDL3test LANGUAGES C)
    
    add_executable(SDL3test main.c)
    
    # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    target_link_libraries(SDL3test PRIVATE SDL3)
    
    include(GNUInstallDirs)
    install(TARGETS SDL3test
        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
    )


    Автоматическое развёртывание я так и не смог прописать в CMake, придётся делать руками. Но хоть пускается.
    Ответ написан
  • Как cpp преобразовать в exe?

    @Mercury13
    Программист на «си с крестами» и не только
    Ищите этот файл в составе MinGW. Большинство сторонних DLL-библиотек используют данную библиотеку в виде DLL, но для отладки (например, если вылет на грани твоей программы и стандартной библиотеки), или если библиотек нет — можно его вставить в EXE.
    Ищите в системе сборки, как добавить ключи:
    в компилятор: -static-libgcc -static-libstdc++
    в линкер: -static -lpthread

    UPD. Вот я собрал мейкфайл. Он при сборке на MinGW будет собирать версию со статически прилинкованными библиотеками.
    cmake_minimum_required(VERSION 3.10.0)
    project(Game VERSION 0.1.0 LANGUAGES C CXX)
    
    if (MINGW)
        add_compile_options(-static-libgcc -static-libstdc++)
        add_link_options(-static -lpthread)	
        if (CMAKE_BUILD_TYPE STREQUAL "Release")
            add_compile_options(-O3)
            add_link_options(-s)
        endif()
    endif()
    
    add_executable(Game main.cpp)
    Ответ написан
  • Как исправить ошибку collect2.exe: error: ld returned 1 exit status?

    @Mercury13
    Программист на «си с крестами» и не только
    На довольно давней версии mingw, имевшейся у меня, получилось сделать вот так — запустив компилятор и линкер раздельно.

    PATH %PATH%;d:\MinGW\x86\bin
    g++ -fopenmp -c main.cpp -o main.o
    g++ -o test.exe main.o -lgomp
    pause

    Заодно пришлось скачать pthreads для win32, по умолчанию библиотеки (*.a) есть, а dll нет.

    И вообще, это зависит от сборки MinGW. На свежих сборках mingw-w64 — как с Win32-, так и с posix-потоками — всё заработало именно по-твоему. И pthreads нашёлся.
    PATH %PATH%;d:\MinGW\i686-5.2.0-win32-dwarf-rt_v4-rev0\mingw32\bin\
    g++ -fopenmp main.cpp -o test.exe
    pause

    Ну и, конечно, ты не указал, ПОЧЕМУ линкер вышел с кодом 1. Но это я уже сам понял, поэкспериментировав.
    Ответ написан
    Комментировать
  • Как понять заголовочные файлы?

    @Mercury13
    Программист на «си с крестами» и не только
    #include — как ни странно.

    Вы так и не поняли такой вещи, как «единица компиляции». Дело в том, что в Си c-файлы компилируются независимо друг от друга (в единую программу всё собирает линкер). А чтобы сказать «оно есть, только в другой единице компиляции», используют прототипы и extern’ы.

    А если вы хотите просто внести код в ту же единицу компиляции, просто пишите его в хедере, да и всё. Только в большинстве компиляторов это исключает предкомпилированные хедеры — а ТАКИЕ хедеры вам предкомпилировать, скорее всего, и не нужно.

    <брюзга mode on>
    Не создают кода (а значит, в традиционной системе с кучей единиц компиляции находится именно в хедерах)
    • extern и прототипы
    • inline
    • не до конца специфицированные шаблоны
    • static-поля в классе (но потом это static-поле придётся повторить в какой-нибудь одной единице компиляции)
    • может, ещё что-то, только я забыл…
    <брюзга mode off>
    Ответ написан
    1 комментарий