5

リリース モードで VS2010 で使用するために、JS V8 をダウンロードしてビルドしました。今、私は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 ==========

"Ignore All Default Libraries: Yes(/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 ==========

この例を実行しようとした人、またはこれらのエラーを修正する方法を知っている人はいますか?

4

3 に答える 3

1

次のライブラリを含める必要がありました。 v8_base.lib;v8_snapshot.lib;ws2_32.lib;winmm.lib

/NODEFAULTLIB:LIBCMTこれが原因でビルドが失敗したと定義しないでください。

どうやって見つけたのか知りたければ、GYPで生成されたALL.slnを調べてshellターゲットをチェックしました。これは、ある時点でv8_baseとリンクする必要がある実行可能ファイルであるため、必要なリンカーオプションがあります。しかし、見つけるのは少し難しかったです。

于 2013-03-14T05:14:39.670 に答える
1

このエラーは__imp__inet_addr@4、 にあるシンボル が欠落しているために発生しWs2_32.libます。

プロジェクトの [プロパティ] -> [リンカー] -> [入力] -> [追加の依存関係] に移動します。追加するだけWs2_32.libで完了です。

于 2012-10-29T07:30:01.087 に答える
0

/NODEFAULTLIB:LIBCMTこの単一のライブラリのみを除外するにはどうすればよいですか? また、v8_snapshot.lib または v8_nosnapshot.lib をリンクするか、共有ライブラリを構築して v8.lib にリンクする必要があると思います

于 2013-02-05T08:33:22.510 に答える