Я пытаюсь скомпилировать код 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