clang: ошибка: команда компоновщика завершилась ошибкой с кодом выхода 1 (неопределенные символы для архитектуры x86_64)

#c #json #clang #vscode-debugger

#c #json #clang #vscode-debugger

Вопрос:

Моя программа заработала после сборки, и я запускаю ее. Пытаюсь связать lldb с моим проектом, чтобы я мог отладить свою программу. Всякий раз, когда я пытаюсь запустить отладчик, у меня появляется это уведомление:

введите описание изображения здесь

Я полагаю, что неправильно настраиваю свой Launch.json, но не могу определить, в чем заключается эта проблема.

На терминал выводится следующее:

 
Undefined symbols for architecture x86_64:
  "write_color(std::__1::basic_ostream<char, std::__1::char_traits<char> >amp;, Vec3)", referenced from:
      _main in main-1e06e3.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
The terminal process "/bin/zsh '-c', '/usr/bin/clang   -std=c  17 -stdlib=libc   -g /Users/n3vdawg/gameDevStudies/ray_tracer_definitive/src/*.cpp -o /Users/n3vdawg/gameDevStudies/ray_tracer_definitive/ray_tracer'" terminated with exit code: 1.

Terminal will be reused by tasks, press any key to close it.
  

Я использую VSCode, и мой проект написан на C . Вот мой файл launch.json и задачи.я полагаю, что предварительная задача в формате json выполнена правильно. Я не могу понять, как правильно отформатировать мой launch.json, и это мешает мне отлаживать.

запустите.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": "clang   - Build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/ray_tracer",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "lldb",
            "preLaunchTask": "C/C  : clang   build active file"
        }
    ]
}
  

tasks.json

 {
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "C/C  : clang   build active file",
            "command": "/usr/bin/clang  ",
            "args": [
                "-std=c  17",
                "-stdlib=libc  ",
                "-g",
                "${workspaceFolder}/src/*.cpp",
                "-o",
                "${workspaceFolder}/ray_tracer"
              ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}
  

Включена также моя файловая структура:

введите описание изображения здесь

Добавление функции write_color:

Color.cpp

 #include <iostream>
#include <fstream>
#include "Color.h"

void write_color(std::ofstream amp;out, Color pixel_color) {
    // Write the translated [0,255] value of each color component
    out << static_cast<int>(255.999 * pixel_color.x()) << ' '
        << static_cast<int>(255.999 * pixel_color.y()) << ' '
        << static_cast<int>(255.999 * pixel_color.z()) << 'n';
}
  

Color.h

 #ifndef _COLOR_H_
#define _COLOR_H_

#include "Vec3.h"

#include <iostream>

void write_color(std::ostream amp;out, Color pixel_color);

#endif
  

Понял, что мне нужно включить fstream, и функция def должна ожидать std::ofstream

Комментарии:

1. Покажите нам объявление и определение этой функции write_color (и в каком файле они находятся)

2. Вероятно, вам также следует инвестировать в приличную систему инкрементной сборки, поскольку в настоящее время вы всегда все перекомпилируете.

3. О, я только что понял, что определение моих объявлений неверно. Я это исправлю. Также должно быть включено fstream .

4. @Botje Что-нибудь порекомендуете? Есть какие-нибудь хорошие материалы для чтения / учебные пособия по этому вопросу?

5. Я использую CMake на своем компьютере. Мне нравится, но я не смог заставить ее работать должным образом с Xcode, поэтому я пошел с этим руководством и обязательно кое-что изменил. По крайней мере, это был хороший опыт обучения! code.visualstudio.com/docs/cpp/config-clang-mac