javascript — & quot; Привет, мир & quot; + JS V8 + VS2010

Я скачал и собрал JS V8 для использования в VS2010 в режиме Release. Сейчас я пытаюсь запустить Пример Hello World:

#include "v8.h"
int _tmain(int argc, _TCHAR* argv[])
{
v8::HandleScope handle_scope;

v8::Persistent<v8::Context> context = v8::Context::New();

v8::Context::Scope context_scope(context);

v8::Handle<v8::String> source = v8::String::New("'Hello' + ', World'");

v8::Handle<v8::Script> script = v8::Script::Compile(source);

v8::Handle<v8::Value> result = script->Run();

context.Dispose();

v8::String::AsciiValue ascii (result);

printf ("%s\n", *ascii);

return 0;
}

Я добавил дополнительные зависимости:

"C:\v8\build\Release\lib\preparser_lib.lib""C:\v8\build\Release\lib\v8_base.lib"

Когда я пытаюсь скомпилировать и запустить программу, я столкнулся с ошибкой компоновки:

1>------ Build started: Project: V8_example, Configuration: Release Win32 ------
1>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
1>v8_base.lib(platform-win32.obj) : error LNK2001: unresolved external symbol __imp__inet_addr@4
...
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Когда я установил «Игнорировать все библиотеки по умолчанию: Да (/ NODEFAULTLIB)», появились следующие ошибки:

1>------ Build started: Project: V8_example, Configuration: Release Win32 ------
1>v8_base.lib(strtod.obj) : error LNK2001: unresolved external symbol @__security_check_cookie@4
1>v8_base.lib(full-codegen-ia32.obj) : error LNK2001: unresolved external symbol @__security_check_cookie@4
...
1>c:\users\admin\documents\visual studio 2010\Projects\V8_example\Release\V8_example.exe : fatal error LNK1120: 141 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Кто-нибудь пробовал запустить этот пример или знает, как исправить эти ошибки?

5

Решение

Ошибка вызвана отсутствующим символом __imp__inet_addr@4, который находится в Ws2_32.lib,

Зайдите в Свойства проекта -> Компоновщик -> Ввод -> Дополнительные зависимости. Просто добавь Ws2_32.lib и вы сделали.

1

Другие решения

Мне пришлось включить следующие библиотеки:
v8_base.lib;v8_snapshot.lib;ws2_32.lib;winmm.lib

НЕ ОПРЕДЕЛИТЬ /NODEFAULTLIB:LIBCMT это привело к сбою моей сборки.

Если вам интересно, как я узнал, я посмотрел в ALL.sln, сгенерированном GYP, и проверил shell цель. Это исполняемый файл, который в какой-то момент должен связываться с v8_base, поэтому у него есть необходимые параметры компоновщика. Это было немного трудно найти, как бы то ни было.

1

как насчет /NODEFAULTLIB:LIBCMTисключить только эту единственную библиотеку?
также я считаю, что вам нужно связать v8_snapshot.lib или v8_nosnapshot.lib
или вы создаете общую библиотеку и ссылаетесь на v8.lib

0
По вопросам рекламы [email protected]