在OSX上运行c++ SpiderMonkey会产生链接器错误
Running C++ SpiderMonkey on OSX produces Linker errors
我试图在OSX上编译SpiderMonkey代码,但Xcode一直给我Mach-O链接器错误。
为了构建,我遵循Mozilla的说明:cd js/src
autoconf-2.13
mkdir build-release
cd build-release
../configure
make
我然后做a:
make install
将标题,a和dylib放入我的/usr/local/
文件夹。为了将Xcode
指向标头,我有:
头搜索路径:
/usr/local/include/**
Library Search Paths:
/usr/local/lib/**
我已经检查以确保libmozjs-24.dylib
和libmozjs-24.a
存在于各自的usr
文件夹中。我把它们拖放到我的XCode项目中。
链接器错误/strong>
架构x86_64:
未定义符号"JS_ResolveStub(JSContext*, JS::Handle, JS::Handle)",引用:main中的Global_class。JS_PropertyStub(JSContext*, JS::Handle, JS::Handle)JS::MutableHandle)",引用自:main中的Global_class。0"JS_DeletePropertyStub(JSContext*, JS::Handle, JS::Handle, int*)",引用自:main中的Global_class。JS_StrictPropertyStub(JSContext*, JS::Handle, JS::Handle, int,JS::MutableHandle)",引用自:main中的Global_class。clang: error: linkker命令失败,退出代码为1(使用-v to。见调用)
我正在尝试遵循下面的"hello world"
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
有一个更现代的操作指南,它演示了如何修复您的问题:不要再指定存根了。你的全局类可以变成:
static JSClass global_class = {
"global",
JSCLASS_GLOBAL_FLAGS
};
和你的运行时创建可以变成:
runtime = JS_NewRuntime(8L * 1024L * 1024L);
,它至少应该编译。
- 静态数据成员的问题-修复链接错误会导致编译器错误
- Visual Studio mkl_link_tool.exe链接错误
- C++ 实现模板单例类时出现链接错误
- 使用类模板的方法链接错误
- MySQL C++连接器链接错误
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 运行 C++ 单元测试时LNK2005链接错误
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 链接错误,包括我创建的相同头文件 - C++
- 在Embarcadero C++ Builder中生成的DLL未解决的外部链接错误
- 使用标头保护的多个定义链接错误
- 链接错误:未定义对 stdscr 和 wgetch 的引用
- 使用 Vivek 的 Vcam / 捕获源过滤器构建/链接错误
- 升压program_options中的链接错误
- 使用 g++ 预处理器进行替换会导致链接错误
- 在调试配置中编译工作正常,但发布会给出链接错误
- 相邻矩阵设置链接错误
- 包含常量变量并包含在多个文件中的标头的链接错误
- C++链接错误,我理解但无法解决
- 是什么导致macOS Mojave上的GoogleTest链接错误