Nano Hash - криптовалюты, майнинг, программирование

Запуск C++ SpiderMonkey на OSX приводит к ошибкам компоновщика

Я пытаюсь скомпилировать код SpiderMonkey на OSX, но Xcode продолжает выдавать мне ошибки Mach-O Linker.

Для сборки я следую инструкциям Mozilla:

cd js/src
autoconf-2.13

mkdir build-release
cd build-release
../configure
make

Затем я делаю:

make install

который помещает заголовки, a и dylib в мои папки /usr/local/. Чтобы указать Xcode на заголовки, у меня есть:

Пути поиска по заголовку:

/usr/local/include/**

Пути поиска в библиотеке:

/usr/local/lib/**

Я проверил, чтобы libmozjs-24.dylib и libmozjs-24.a существовали в соответствующих папках usr. Я перетащил их в свой проект XCode.

Ошибки компоновщика

Неопределенные символы для архитектуры x86_64:
"JS_ResolveStub(JSContext*, JS::Handle, JS::Handle)", на которые ссылается: global_class в main.o "JS_PropertyStub(JSContext*, JS::Handle, JS::Handle)". , JS::MutableHandle)", на который ссылается: global_class в main.o "JS_DeletePropertyStub(JSContext*, JS::Handle, JS::Handle, int*)", на который ссылается: global_class в main.o "JS_StrictPropertyStub(JSContext*) , JS::Handle, JS::Handle, int, JS::MutableHandle)", ссылка из: global_class в main.old: символ(ы) не найден(ы) для архитектуры x86_64 clang: ошибка: команда компоновщика завершилась неудачно с кодом выхода 1 (используйте -v, чтобы увидеть вызов)

Я пытаюсь следовать следующему «привет мир»

https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/JSAPI_User_Guide

и мой код выглядит следующим образом:

#define JS_DEBUG 1

/* Include the JSAPI header file to get access to SpiderMonkey. */
#include <jsapi.h>

static JSClass global_class = { "global",
    JSCLASS_NEW_RESOLVE | JSCLASS_GLOBAL_FLAGS,
    JS_PropertyStub,
    JS_DeletePropertyStub,
    JS_PropertyStub,
    JS_StrictPropertyStub,
    JS_EnumerateStub,
    JS_ResolveStub,
    JS_ConvertStub,
    nullptr,
    JSCLASS_NO_OPTIONAL_MEMBERS
};

int run(JSContext *cx) {

    JSAutoRequest ar(cx);

    JSObject *global = JS_NewGlobalObject(cx, &global_class, nullptr);
    if (!global)
        return 1;

    return 0;
}

int main(int argc, const char *argv[])
{
    JSRuntime * runtime;

    runtime = JS_NewRuntime(8L * 1024L * 1024L, JS_NO_HELPER_THREADS);
    if (runtime == NULL) {
        fprintf(stderr, "cannot create runtime");
        exit(EXIT_FAILURE);
    }

    /* Create a context. */
    JSContext *cx = JS_NewContext(runtime, 8192);
    if (!cx)
        return 1;
    JS_SetOptions(cx, JSOPTION_VAROBJFIX);
    //JS_SetErrorReporter(cx, reportError);

    int result = run(cx);

    JS_DestroyContext(cx);
    JS_DestroyRuntime(runtime);

    /* Shut down the JS engine. */
    JS_ShutDown();

    return result;
}

Кажется, что часть кода не имеет проблем с линковкой, но у других есть.

Любая надежда очень ценится!

ИЗМЕНИТЬ

Я запустил тот же код, используя GCC через терминал, используя:

g++ -I/usr/local/include /usr/local/lib/libmozjs-24.a -lm -ldl main.cpp -o main

Я получаю вывод:

Undefined symbols for architecture x86_64:
  "JS_ResolveStub(JSContext*, JS::Handle<JSObject*>, JS::Handle<jsid>)", referenced from:
      global_class in main-fa83e1.o
  "JS_PropertyStub(JSContext*, JS::Handle<JSObject*>, JS::Handle<jsid>,     JS::MutableHandle<JS::Value>)", referenced from:
      global_class in main-fa83e1.o
  "JS_DeletePropertyStub(JSContext*, JS::Handle<JSObject*>, JS::Handle<jsid>, int*)", referenced from:
      global_class in main-fa83e1.o
  "JS_StrictPropertyStub(JSContext*, JS::Handle<JSObject*>, JS::Handle<jsid>, int,     JS::MutableHandle<JS::Value>)", referenced from:
  global_class in main-fa83e1.o

Ответы:


1

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

static JSClass global_class = {
    "global",
    JSCLASS_GLOBAL_FLAGS
};

и ваше создание среды выполнения может стать:

runtime = JS_NewRuntime(8L * 1024L * 1024L);

и он должен как минимум компилироваться.

13.07.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..