最近,我在Qt5.1.0下启动了一个项目。经过一番开发,我选择用Google V8在Javascript
下做一个脚本系统。
在Windows 7 x64下,编译V8的唯一方法是在msvc2012下,我有 3 个 .lib 文件可供使用。在仅使用 V8
的单个项目中,一切正常。但是将 V8 与使用 Qt5 的现有项目集成起来有点复杂。
这是我正在使用的最小代码示例:(当然,这个项目中有更多文件......)
#include <QApplication>
#include <v8.h>
using namespace v8;
int v8_test() {
Isolate* isolate = Isolate::GetCurrent();
HandleScope handle_scope(isolate);
Handle<Context> context = Context::New(isolate);
Persistent<Context> persistent_context(isolate, context);
Context::Scope context_scope(context);
Handle<String> source = String::New("'Hello' + ', World!'");
Handle<Script> script = Script::Compile(source);
Handle<Value> result = script->Run();
persistent_context.Dispose();
String::AsciiValue ascii(result);
printf("%s\n", *ascii);
return 0;
}
int main(int ac, char **av)
{
std::cout<<"Starting application"<<std::endl;
QApplication app(ac, av);
v8_test();
//Do something else
return app.exec();
}
在这一点上,我得到了很多这种类型的链接错误:
1>v8_base.x64.lib(api.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in moc_aCertainFile.obj
1>v8_base.x64.lib(v8threads.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in moc_aCertainFile.obj
1>v8_base.x64.lib(checks.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in moc_aCertainFile.obj
貌似Qt是用/MDd
flag编译的,V8只能编译/MTd
flag。
经过大量的研究和测试,我找不到任何东西......
有人有解决这个问题的线索吗?
提前致谢。