我正在尝试在OSX上编译SpiderMonkey代码,但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)”, 引自: main.o中的global_class“JS_PropertyStub(JSContext *,JS :: Handle,JS :: Handle, JS :: MutableHandle)“,引自: main.o中的global_class“JS_DeletePropertyStub(JSContext *,JS :: Handle,JS :: Handle,int *)”,引用自: main.o中的global_class“JS_StrictPropertyStub(JSContext *,JS :: Handle,JS :: Handle,int, JS :: MutableHandle)“,引自: main.o中的global_class:未找到架构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通过终端使用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
答案 0 :(得分:1)
还有更多modern how-to guide可用于演示针对您的问题的修复:不再指定Stubs。您的全球课程可以成为:
module.directive('myDirective', function () {
return {
controller: function ($scope, $element) {
// ...
}
}
});
,您的运行时创建可以变为:
static JSClass global_class = {
"global",
JSCLASS_GLOBAL_FLAGS
};
它至少应该编译。