未能在原生 Dart 扩展中链接 v8
Posted
技术标签:
【中文标题】未能在原生 Dart 扩展中链接 v8【英文标题】:Failure to link v8 in a native Dart extension 【发布时间】:2017-08-04 23:11:52 【问题描述】:我正在尝试在 Dart native extension 中使用 v8。
v8 getting started guide 表示要像这样编译 hello world 示例。
g++ -I. -Iinclude samples/hello-world.cc -o hello-world -Wl,--start-group \
out.gn/x64.release/obj/libv8_base,libbase,external_snapshot,libplatform,libsampler,\
third_party/icu/libicuuc,i18n,src/inspector/libinspector.a \
-Wl,--end-group -lrt -ldl -pthread -std=c++0x
Dart 说要像这样编译原生扩展:
g++ -fPIC -Ipath to SDK include directory -DDART_SHARED_LIB -c sample_extension.cc
gcc -shared -m32 -Wl,-soname,libsample_extension.so -o libsample_extension.so sample_extension.o
这是我想出的混合动力
g++ -fPIC -Ipath to SDK include directory -Iinclude -DDART_SHARED_LIB -c sample_extension.cc -std=c++0x
gcc -shared -Wl,-soname,libsample_extension.so -Wl,--start-group out.gn/x64.release/obj/libv8_base,libbase,external_snapshot,libplatform,libsampler,third_party/icu/libicuuc,i18n,src/inspector/libinspector.a -Wl,--end-group -o libsample_extension.so sample_extension.o -lrt -ldl -pthread -std=c++0x
但是,在尝试运行我的应用程序时,我收到一条错误消息,指出 v8 未正确链接。
dart: symbol lookup error: /mnt/c/Users/zvacu/Documents/Code/Dart/require/libsample_extension.so: undefined symbol: _ZN2v82V828InitializeICUDefaultLocationEPKcS2_
使用提供的 hello world 示例时,我可以设法正确链接它。
【问题讨论】:
【参考方案1】:做一些研究,似乎问题出在第二个命令的 -shared 属性上。您需要注意 C++ 和共享库,因此请通过以下方式检查您的库是否获取所有依赖项:
ldd /mnt/c/Users/zvacu/Documents/Code/Dart/require/libsample_extension.so
之后你会得到一个所有依赖的列表,然后你需要搜索是否缺少任何人。
如果这不能回答您的问题,请参阅此相关答案:
Undefined symbol when loading a shared library
【讨论】:
以上是关于未能在原生 Dart 扩展中链接 v8的主要内容,如果未能解决你的问题,请参考以下文章
未能加载文件或程序集“DevExpress.Data.v8.1 求解答 ~!急