linuxでGoogle V8を使用しているときに問題があります。共有ライブラリにV8インスタンスを作成すると、segfaultが生成されます。同じコードは、WindowsのDLLとLinuxの実行可能ファイルで正常に動作します。google v8 NewがLinux共有ライブラリで失敗しました "セグメントエラー"が発生しました
マイコード:
extern "C" void InitV8ExtensionInterFace(){
v8::V8::InitializeICU();
v8::V8::Initialize();
v8::Isolate* isolate = v8::Isolate::New(); **//error occur**
threadfunc(argc, args);
}
gdb
スタックトレース:
#0 0x0000000000000000 in ??()
#1 0x00007ffff3cb86d5 in v8::internal::Builtins::SetUp (this=0x7fffffffb9e0, isolate=0x235abb0, create_heap_objects=false) at ../src/builtins.cc:1567
#2 0x00007ffff3e271cf in v8::internal::Isolate::Init (this=0x235abb0, des=0x0) at ../src/isolate.cc:2115
#3 0x00007ffff3c96049 in v8::Isolate::New (params=...) at ../src/api.cc:6861
#4 0x00007ffff3b78d40 in InitV8ExtensionInterFace() at ../Framework/ExPublic.cpp:107
#5 0x00000000004729db in myTest1() at arangod/RestServer/arangod.cpp:106
#6 0x0000000000472a50 in main (argc=1, argv=0x7fffffffe118) at arangod/RestServer/arangod.cpp:126
V8機能void Builtins::SetUp(Isolate* isolate, bool create_heap_objects)
に、配列functions
が空であることが表示されます。
extern "C" void InitV8ExtensionInterFace(){
v8::V8::InitializeICU();
v8::Platform* platform = v8::platform::CreateDefaultPlatform();
v8::V8::InitializePlatform(platform); **//error occur**
v8::V8::Initialize();
v8::Isolate* isolate = v8::Isolate::New();
threadfunc(argc, args);
}
gdb
スタックトレース:私はv8::Platform
を初期化する場合は、エラーコードV8::InitializePlatform(platform)
に発生します
1: V8_Fatal
2: v8::internal::V8::InitializePlatform(v8::Platform*)
3: InitV8ExtensionInterFace
4: 0x4aab60
5: 0x4aacf1
6: 0x5f4532
7: 0x47c32b
8: 0x474498
9: 0x472ae1
10: __libc_start_main
11: 0x4726f9
Thread 1 received signal SIGABRT, Aborted.
0x00007ffff66595e5 in raise() from /lib64/libc.so.6
(gdb) where
#0 0x00007ffff66595e5 in raise() from /lib64/libc.so.6
#1 0x00007ffff665adc5 in abort() from /lib64/libc.so.6
#2 0x00007fffc6e7d9c9 in v8::base::OS::Abort() at ../src/base/platform/platform-posix.cc:233
#3 0x00007fffc6e7b586 in V8_Fatal (file=0x7fffc703f535 "../src/v8.cc", line=107, format=0x7fffc6ffe77a "Check failed: %s.") at ../src/base/logging.cc:116
#4 0x00007fffc6cbd909 in v8::internal::V8::InitializePlatform (platform=0x267d840) at ../src/v8.cc:107
#5 0x00007fffc690bc8b in InitV8ExtensionInterFace() at ../Framework/ExPublic.cpp:98
#6 0x00000000004aab60 in myTest() at arangod/V8Server/ApplicationV8.cpp:1068
#7 0x00000000004aacf1 in triagens::arango::ApplicationV8::prepare2 (this=0x2378310) at arangod/V8Server/ApplicationV8.cpp:1093
#8 0x00000000005f4532 in triagens::rest::ApplicationServer::prepare2 (this=0x2377000) at arangod/ApplicationServer/ApplicationServer.cpp:525
#9 0x000000000047c32b in triagens::arango::ArangoServer::startupServer (this=0x2375330) at arangod/RestServer/ArangoServer.cpp:1009
#10 0x0000000000474498 in triagens::rest::AnyServer::start (this=0x2375330) at arangod/Rest/AnyServer.cpp:347
#11 0x0000000000472ae1 in main (argc=1, argv=0x7fffffffe118) at arangod/RestServer/arangod.cpp:139
私はv8::V8::GetVersion
と、実行時に "4.3.61" を取得します。
この問題は数日間困っています。誰かが私に助けてくれれば幸いです。ありがとうございます。
プラットフォームを初期化しない場合、エラーは関数 'v8 :: Isolate :: New'で発生します。 GDB情報:#0 0x0000000000000000? ../src/builtins.cc:1567#2でv8 :: internal :: Builtins :: SetUp(this = 0x7fffffffb9e0、isolate = 0x235abb0、create_heap_objects = false)の#1 0x00007ffff3cb86d5をv8 :: internal ::#で0x00007ffff3e271cfに変換します。 ../src/isolate.cc:2115#3のIsolate :: Init(this = 0x235abb0、des = 0x0)v8 :: Isolate :: New(params = ...)in ../src/apiの0x00007ffff3c96049。 ../Framework/ExPublic.cpp:107のinitV8ExtensionInterFace()内のcc:6861#4 0x00007ffff3b78d40 arangod/RestのmyTest1()の0x00000000004729db –
実行時の@isanaeバージョンは、関数 'v8を介して" 4.3.61 " :V8 :: GetVersion' –