Не запускается скомпилированный файл C++ на macOS из Finder

Всем привет ! Я работаю на MacOS Sonoma 14.4 (MacBook Air M2). Использую Visual Studio Code. Код написан на C++ с использованием "sqlite3.h".

#include <iostream>
#include <string>
#include "sqlite3.h"

using namespace std;

// Callback функция для обработки результатов запроса
static int callback(void *NotUsed, int argc, char **argv, char **azColName) {
    // argc - количество столбцов в результате
    // argv - массив значений полей
    // azColName - массив имен столбцов
    for(int i = 0; i < argc; i++) {
        cout << azColName[i] << ": " << (argv[i] ? argv[i] : "NULL") << endl;
    }
    cout << endl;
    return 0;
}

int main() {


    sqlite3 *DB;
    int check = 0;
    const char* dbPath = "DataBase.db";
    check = sqlite3_open(dbPath, &DB);

    // Проверка на открытие базы
    if (check != SQLITE_OK) {
        cerr << sqlite3_errmsg(DB) << endl;
        sqlite3_close(DB);
        return -1;
    }
    else {
        cout << "Base was opened !" << endl;
        cout << "_ _ _ _ _ _ _ _ _" << endl;
        cout << endl;
    }


    char *err_message = 0;
    const char *sql_showTable = "SELECT * FROM Books";
    check = sqlite3_exec(DB, sql_showTable, callback, NULL, &err_message);

    // Проверка на успешное выполнение запроса
    if (check != SQLITE_OK) {
        cerr << sqlite3_errmsg(DB) << endl;
        sqlite3_free(err_message); // Освобождение памяти
        sqlite3_close(DB);
        return -1;
    }


    sqlite3_close(DB);
    return 0;
}

1: Подключение к базе данных: Программа пытается открыть базу данных DataBase.db. Если база данных не может быть открыта (например, из-за ошибки доступа или если файл базы данных не существует), программа выводит сообщение об ошибке и завершается с ошибкой.

2: Вывод содержимого таблицы: Если соединение с базой данных успешно установлено, программа выполняет SQL-запрос SELECT * FROM Books, который выбирает все записи из таблицы Books. Для обработки и вывода результатов запроса используется callback-функция callback. Эта функция перебирает все строки результатов запроса, выводя значения каждого столбца в консоль. Для каждой строки выводятся имена столбцов и соответствующие значения полей, причем для пустых полей выводится "NULL".

3: Обработка ошибок: Если при выполнении SQL-запроса происходит ошибка (например, если таблицы Books не существует), программа выводит сообщение об ошибке, освобождает выделенную память для сообщения об ошибке и закрывает соединение с базой данных, после чего завершается с ошибкой.

4: Закрытие соединения с базой данных: После успешного выполнения запроса или в случае возникновения ошибки соединение с базой данных закрывается.

У меня все файлы находятся сейчас в папке Book_DatabaseNew. В папке Book_DatabaseNew есть файлы: DataBase.db; main.cpp; main и main.dSYM. Если я запускаю файл через терминал и использую cd - например: открыл терминал, написал cd /Users/dmitry/Documents/Program_Language_Folder/CppProj/Book_DatabaseNew и затем прописываю команду .main, то всё отлично работает. Если я просто перехожу через Finder в папку Book_DatabaseNew и пытаюсь запустить файл main (двойным нажатием), то в терминале выводится:

Base was opened !
_ _ _ _ _ _ _ _ _

no such table: Books

Saving session...completed.

Я даже пытался написать скрипт через automator или через .sh по типу:

#!/bin/bash
cd "$(dirname "$0")"
./main

upd: через pwd тоже пробовал. Но даже в этом случае программа не срабатывает. Кстати если запустить скрипт в котором будет прописано что-то по типу такого:

FILENAME="example.txt"

echo "Пример текста, который будет записан в файл." > "$FILENAME"

echo "Файл '$FILENAME' был успешно создан и в него был записан текст."

..то файл создаётся в каталоге ~ , что опять же странно, ибо скрипт запущен из каталога Book_DatabaseNew. Я не понимаю как это пофиксить ? Я просто хочу запускать файл через ярлык, но это не срабатывает. Я испробовал разные способы, но не нашёл решения. Почему так происходит ? Как в итоге создать рабочий ярлык с программой, которую я могу запустить ? !! Я буду скачивать эту программу на другой компьютер, по-этому абсолютный путь к бд в самом коде меня не устраивает, хотя это срабатывает !! Мой каталог Запуск через Finder файла main

Запуск с использованием cd и ./main

Как дополнение мой файл tasks.json:

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ сборка активного файла",
            "command": "/usr/bin/g++",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}",
                "-lsqlite3"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Задача создана отладчиком."
        }
    ],
    "version": "2.0.0"
}

И также БД: БД


Ответы (0 шт):