LINUX.ORG.RU

Visual Studio Code. Проблемы с компиляцией Си

 , ,


0

1

Всем привет. Решил попробовать программирование на Си. Компиляция работает странно. Ругается на то что не хватает каких-то библиотек. При этом в терминале VS Code программа отрабатывает как надо. Норма ли это?

Код программы:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("Hello world!\n");
    return 0;
}

Консоль отладки в VS Code:

=thread-group-added,id="i1"
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04.1) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word".
Warning: Debuggee TargetArchitecture not detected, assuming x86_64.
=cmd-param-changed,param="pagination",value="off"
Stopped due to shared library event (no libraries added or removed)
Loaded '/lib64/ld-linux-x86-64.so.2'. Symbols loaded.

Breakpoint 1, main () at /home/me/git/c/hello_world/main.c:5
5	{
Loaded '/lib/x86_64-linux-gnu/libc.so.6'. Symbols loaded.
[Inferior 1 (process 39951) exited normally]
The program '/home/me/git/c/hello_world/main' has exited with code 0 (0x00000000).

Терминал в VS Code:

Hello world!
[1] + Done                       "/usr/bin/gdb" --interpreter=mi --tty=${DbgTerm} 0<"/tmp/Microsoft-MIEngine-In-vbdszetz.bm1" 1>"/tmp/Microsoft-MIEngine-Out-2u2ycua3.n1v"

Файл /lib64/ld-linux-x86-64.so.2 существует. Он является ссылкой на /lib/x86_64-linux-gnu/ld-2.31.so

me@mint:~/git/c/hello_world$ file /lib64/ld-linux-x86-64.so.2
/lib64/ld-linux-x86-64.so.2: symbolic link to /lib/x86_64-linux-gnu/ld-2.31.so
me@mint:~/git/c/hello_world$ file /lib/x86_64-linux-gnu/ld-2.31.so
/lib/x86_64-linux-gnu/ld-2.31.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=4587364908de169dec62ffa538170118c1c3a078, stripped


Ответ на: комментарий от Extraterrestrial

Да, я уже находил это обсуждение.

Только я не понимаю куда он просит прописать

set stop-on-solib-events 0

У меня в консоль отладки VS Code вписать ничего нельзя. Если выполнить в обычном терминале, то это ни на что не влияет.

Cau84
() автор топика

Начнём с того, что ругается не компиляция, а отладка.

Продолжим тем, что в launch.json в конфигурации gdb есть список «setupCommands», в него вроде как надо добавить

,"set stop-on-solib-events 0"

Хотя, сдается мне, останова не произошло вовсе не от «неправильных» опций запуска gdb, а от того, что ты программу собираешь без опции -g, зато с оптимизацией и стрипаньем отладочных сиволов…

shkolnick-kun ★★★★★
()
Последнее исправление: shkolnick-kun (всего исправлений: 2)

И вообще, завязывай ты с этой мастдайной вижалстудией, есть нормальные инструменты, в частности Code::Blocks.

Там на онтопике проблем куда меньше. А на офтопике - есть косяки с интерфейсом gdb, но это решаемо.

shkolnick-kun ★★★★★
()

Предлагаю осилить систему сборки, например cmake и собирать отдельно из командной строки или просто отдельно. Это пригодится больше. Ниразу в работе не встречал чтобы компилировали прям в вскоде, он обычно просто как редактор кода используется теми, кто vim/emacs ниасилил.

untitl3d
()

а вот нафик нужен VSCode ?

ещё можно понять - большая практика, огромные проекты = дело привычки и сложно сразу слезть с зонда Студии.

но когда «Решил попробовать программирование на Си» - это уже за гранью добра и зла.

Для «решил попробовать» - есть тьма средств гораздо более лёгких и удобных в использовании и настройке. Везде прямо из коропки идут Кате, Кде-девелопер и Коде-лайт.

Даже гномовская Анюта по удобству/скорости освоения и использования даёт 100 очков форы.

MKuznetsov ★★★★★
()
Ответ на: комментарий от shkolnick-kun

У меня vscode сам подкинул вот такой launch.json. Я туда вписал твой параметр. Но проблема не ушла.

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
    {
        "name": "(gdb) Запустить",
        "type": "cppdbg",
        "request": "launch",
        "program": "Введите имя программы, например: ${workspaceFolder}/a.out",
        "args": [],
        "stopAtEntry": false,
        "cwd": "${fileDirname}",
        "environment": [],
        "externalConsole": false,
        "MIMode": "gdb",
        "setupCommands": [
            {
                "description": "Включить автоматическое форматирование для gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": true
            },
            {
                "description":  "Задать для варианта приложения дизассемблирования значение Intel",
                "text": "-gdb-set disassembly-flavor intel",
                "ignoreFailures": true
            },
            {
                "set stop-on-solib-events": 0
            }
        ]
    }
    ]

}

В любом случае, спасибо. Я не буду vscode использовать для C, для учебы этому языку IDE не подходит.

Cau84
() автор топика
Ответ на: комментарий от MKuznetsov

а вот нафик нужен VSCode ?

Я там на Python писал. Решил в нём же и попробовать на Си.

Code::Blocks попробовал, жалко только там полноценной темной темы нет. Тем не менее, всем спасибо за ответы. Буду юзать Code::Blocks или Vim в консоли.

Cau84
() автор топика
Ответ на: комментарий от shkolnick-kun

И вообще, завязывай ты с этой мастдайной вижалстудией, есть нормальные инструменты, в частности Code::Blocks.

Там на онтопике проблем куда меньше.

Ты просто не умеешь готовить VSCode. Для однофайловых «проектов» уровня laba1.cpp ставится https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner и код запускается нажатием Ctrl+Alt+N. clangd вполне работает без compile_commands.json (если всё же нужно указать какие-то флаги для clangd, они пишутся в один файлик compile_flags.txt). Всё. Никаких километровых launch.json не нужно изобретать. (Отладчик тоже, очевидно, нинужен).

utf8nowhere ★★★
()
Ответ на: комментарий от Cau84

проще начать с того, что не понявшая сторона, сообщит своё текущее понимание, что бы донор мнения сообщил диф в свой черёд

qulinxao3
()
Последнее исправление: qulinxao3 (всего исправлений: 1)
Ответ на: комментарий от utf8nowhere

Мне не надо IDE готовить, мне надо писать с минимальным сексом с IDE, сборочной системой, отладчиком.

Если мы говорим про проекты тыщ на 10 строк на Си, Code::Blocks - отличное решение: мало весит, быстро работает, gcc и gdb работают на онтопике из коробки.

shkolnick-kun ★★★★★
()
Последнее исправление: shkolnick-kun (всего исправлений: 1)