2012-10-29 65 views
5

我下載並構建了JS V8,以便在VS2010中以發佈模式使用。現在,我嘗試運行Hello World example「Hello World」+ JS V8 + VS2010

#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__in[email protected] 
... 
========== 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 @[email protected] 
1>v8_base.lib(full-codegen-ia32.obj) : error LNK2001: unresolved external symbol @[email protected] 
... 
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 ========== 

有沒有人試圖運行這個例子或知道如何解決這些錯誤?

回答

1

該錯誤是由於缺失的符號[email protected],它位於Ws2_32.lib

轉到項目屬性 - >鏈接器 - >輸入 - >其他依賴項。只需添加Ws2_32.lib即可完成。

+0

在28以下減少的錯誤數量:1> LINK:警告LNK4098:defaultlib'LIBCMT'與使用其他庫相沖突;使用/ NODEFAULTLIB:library 1> v8_base.lib(platform-win32.obj):錯誤LNK2001:無法解析的外部符號__imp__timeGetTime @ 0 1> v8_base.lib :錯誤LNK2001:無法解析的外部符號「private:static int const v8: :internal :: Snapshot :: cell_space_used_「(?cell_space_used_ @ Snapshot @ internal @ v8 @@ 0HB)... –

0

/NODEFAULTLIB:LIBCMT怎麼樣,只排除這個單個庫? 也相信你需要鏈接v8_snapshot.lib或v8_nosnapshot.lib 或你建立共享庫,並鏈接到v8.lib

1

我必須包括以下庫: v8_base.lib;v8_snapshot.lib;ws2_32.lib;winmm.lib

沒有定義/NODEFAULTLIB:LIBCMT這個導致我的構建失敗。

如果您好奇我是如何發現的,我查看了由GYP生成的ALL.sln,並檢查了shell目標。這是一個可執行文件,必須在某個時刻與v8_base鏈接,因此它具有所需的鏈接器選項。然而,這很難找到。