#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