2012-10-29 12 views
5

リリースモードでVS2010で使用するためのJS V8をダウンロードしてビルドしました。今、私は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 [email protected] 
... 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

I 「すべてのデフォルトライブラリを無視:はい(/ 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

このエラーは、というシンボルがありません。これはWs2_32.libにあります。

プロパティ - >リンカー - >入力 - >追加の依存関係に移動します。単にWs2_32.libを追加すると完了です。

+0

エラー数が28未満に減少しました。 > LINK:warning LNK4098:defaultlib 'LIBCMT'は他のライブラリの使用と競合します。/LNK2001:未解決の外部シンボル__imp__timeGetTime @ 0 1> v8_base.lib :エラーLNK2001:未解決の外部シンボル "private:static int const v8: :internal :: Snapshot :: cell_space_used_ "(?cell_space_used_ @スナップショット@内部@ v8 @@ 0HB)... –

0

/NODEFAULTLIB:LIBCMT、この単一のライブラリのみを除外しますか? /NODEFAULTLIB:LIBCMTこれを定義しない v8_base.lib;v8_snapshot.lib;ws2_32.lib;winmm.lib

: も私は以下のライブラリが含まれなければならなかったあなたがv8_snapshot.libやv8_nosnapshot.lib をリンクする必要があるか、

1

をv8.libする共有ライブラリとのリンクを構築すると考えています私のビルドが失敗する原因となった。

私が見つけた方法が不思議であれば、GYPによって生成されたALL.slnを調べ、shellターゲットを確認しました。これは実行可能ファイルで、ある時点でv8_baseにリンクする必要があるため、必要なリンカオプションがあります。しかし、見つけるのはちょっと難しかったです。