gpt4 book ai didi

c++ - 尝试嵌入 v8 的链接器错误

转载 作者:行者123 更新时间:2023-11-30 02:44:02 25 4
gpt4 key购买 nike

我正在尝试制作一个嵌入 Google 的 V8 Javascript 引擎的简单程序。说明似乎很简单,但我遇到了一个奇怪的链接错误。

我在 Mac OS X 10.9 上,我使用 Xamarin Studio 作为我的 IDE,它似乎使用 g++ 作为编译器。

我使用 instructions on their site 编译了 v8 .具体来说,在所有 make dependencies 之后,我运行了:

make x64.release

这似乎成功完成了。

这是我尝试构建项目时得到的输出:

g++ -o "/Users/mike/Projects/vate/vate/bin/Debug/vate" "/Users/mike/Projects/vate/vate/bin/Debug/hello_world.o"  -v -L"/Users/mike/Projects/v8/xcodebuild/Debug" -l"icudata" -l"icui18n" -l"v8_snapshot" -l"icuuc" -l"v8_libbase" -l"v8_base" -l"v8_libplatform" Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)Target: x86_64-apple-darwin13.3.0Thread model: posix "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -dynamic -arch x86_64 -macosx_version_min 10.9.0 -o /Users/mike/Projects/vate/vate/bin/Debug/vate -L/Users/mike/Projects/v8/xcodebuild/Debug /Users/mike/Projects/vate/vate/bin/Debug/hello_world.o -licudata -licui18n -lv8_snapshot -licuuc -lv8_libbase -lv8_base -lv8_libplatform -lc++ -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/5.1/lib/darwin/libclang_rt.osx.aUndefined symbols for architecture x86_64:  "std::string::c_str() const", referenced from:      v8::internal::Logger::SharedLibraryEvent(std::string const&, unsigned long, unsigned long) in libv8_base.a(log.o)  "std::allocator::allocator()", referenced from:      v8::base::OS::GetSharedLibraryAddresses() in libv8_libbase.a(platform-macos.o)  "std::allocator::~allocator()", referenced from:      v8::base::OS::GetSharedLibraryAddresses() in libv8_libbase.a(platform-macos.o)  "std::basic_string, std::allocator >::basic_string(char const*, std::allocator const&)", referenced from:      v8::base::OS::GetSharedLibraryAddresses() in libv8_libbase.a(platform-macos.o)  "std::basic_string, std::allocator >::basic_string(std::string const&)", referenced from:      v8::base::OS::SharedLibraryAddress::SharedLibraryAddress(v8::base::OS::SharedLibraryAddress const&) in libv8_libbase.a(platform-macos.o)      v8::base::OS::SharedLibraryAddress::SharedLibraryAddress(std::string const&, unsigned long, unsigned long) in libv8_libbase.a(platform-macos.o)  "std::basic_string, std::allocator >::~basic_string()", referenced from:      v8::base::OS::SharedLibraryAddress::~SharedLibraryAddress() in libv8_base.a(log.o)      v8::base::OS::GetSharedLibraryAddresses() in libv8_libbase.a(platform-macos.o)      v8::base::OS::SharedLibraryAddress::~SharedLibraryAddress() in libv8_libbase.a(platform-macos.o)  "std::string::operator=(std::string const&)", referenced from:      v8::base::OS::SharedLibraryAddress::operator=(v8::base::OS::SharedLibraryAddress const&) in libv8_libbase.a(platform-macos.o)  "std::_Rb_tree_decrement(std::_Rb_tree_node_base*)", referenced from:      std::_Rb_tree_iterator >::operator--() in libv8_base.a(allocation-tracker.o)      std::_Rb_tree_iterator >::operator--() in libv8_base.a(lithium-codegen.o)      std::_Rb_tree_iterator::operator--() in libv8_base.a(verifier.o)      std::_Rb_tree_iterator::operator--() in libv8_base.a(instruction.o)      std::_Rb_tree_iterator >::operator--() in libv8_base.a(instruction-selector.o)      std::_Rb_tree_iterator::operator--() in libv8_base.a(typer.o)      std::_Rb_tree_iterator::operator--() in libv8_base.a(graph-visualizer.o)      ...  "std::_Rb_tree_increment(std::_Rb_tree_node_base const*)", referenced from:      std::_Rb_tree_const_iterator >::operator++() in libv8_base.a(lithium.o)      std::_Rb_tree_const_iterator::operator++() in libv8_base.a(verifier.o)      std::_Rb_tree_const_iterator >::operator++() in libv8_base.a(instruction.o)      std::_Rb_tree_const_iterator::operator++() in libv8_base.a(typer.o)      std::_Rb_tree_const_iterator::operator++() in libv8_base.a(graph-visualizer.o)  "std::_Rb_tree_increment(std::_Rb_tree_node_base*)", referenced from:      std::_Rb_tree_iterator >::operator++() in libv8_base.a(allocation-tracker.o)      std::_Rb_tree_iterator >::operator++(int) in libv8_base.a(allocation-tracker.o)  "std::__throw_length_error(char const*)", referenced from:      std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, v8::base::OS::SharedLibraryAddress const&) in libv8_libbase.a(platform-macos.o)      std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, v8::internal::compiler::Reducer* const&) in libv8_base.a(pipeline.o)      std::vector >::_M_fill_insert(__gnu_cxx::__normal_iterator > >, unsigned long, v8::internal::compiler::Node* const&) in libv8_base.a(ast-graph-builder.o)      std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, v8::internal::compiler::Node* const&) in libv8_base.a(ast-graph-builder.o)      std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, v8::internal::compiler::FrameStateDescriptor* const&) in libv8_base.a(instruction.o)      std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, v8::internal::compiler::Node* const&) in libv8_base.a(simplified-lowering.o)      std::vector >::reserve(unsigned long) in libv8_base.a(instruction-selector.o)      ...  "std::__throw_out_of_range(char const*)", referenced from:      std::vector >::_M_range_check(unsigned long) const in libv8_base.a(graph-reducer.o)      std::vector >::_M_range_check(unsigned long) const in libv8_base.a(ast-graph-builder.o)      std::vector >::_M_range_check(unsigned long) const in libv8_base.a(verifier.o)      std::vector >::_M_range_check(unsigned long) const in libv8_base.a(verifier.o)      std::vector >::_M_range_check(unsigned long) const in libv8_base.a(graph-replay.o)      std::vector >::_M_range_check(unsigned long) const in libv8_base.a(js-context-specialization.o)      std::vector >::_M_range_check(unsigned long) const in libv8_base.a(graph-builder.o)      ...  "std::_Rb_tree_rebalance_for_erase(std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)", referenced from:      std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::erase(std::_Rb_tree_iterator >) in libv8_base.a(allocation-tracker.o)  "std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)", referenced from:      std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair const&) in libv8_base.a(allocation-tracker.o)      std::_Rb_tree, v8::internal::Handle, std::_Identity >, std::less >, v8::internal::zone_allocator > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, v8::internal::Handle const&) in libv8_base.a(lithium-codegen.o)      std::_Rb_tree, std::less, v8::internal::zone_allocator >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, v8::internal::compiler::Node* const&) in libv8_base.a(verifier.o)      std::_Rb_tree, std::less, v8::internal::zone_allocator >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, int const&) in libv8_base.a(instruction.o)      std::_Rb_tree, std::_Select1st >, std::less, v8::internal::zone_allocator > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair const&) in libv8_base.a(instruction-selector.o)      std::_Rb_tree, std::less, v8::internal::zone_allocator >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, v8::internal::compiler::Node* const&) in libv8_base.a(typer.o)      std::_Rb_tree, std::less, v8::internal::zone_allocator >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, v8::internal::compiler::Node* const&) in libv8_base.a(graph-visualizer.o)      ...ld: symbol(s) not found for architecture x86_64clang: error: linker command failed with exit code 1 (use -v to see invocation)

我感觉我编译 v8 是错误的,或者可能是针对不同的编译器,但我找不到任何方法来自定义它。还有其他人看到这个吗?

最佳答案

我想通了。我有两个问题:

  1. 我对自己实际使用的编译器感到困惑。在 OSX 上,g++ 实际上是符号链接(symbolic link)到 clang++,所以我需要使用 Clang 约定而不是 g++ 来编译 V8

  2. Google 页面上有关使用 clang 进行编译的说明不正确,根据此错误:https://code.google.com/p/v8/issues/detail?id=3072

作为引用,要使用 clang 进行编译,您需要像这样配置您的环境:

export CXX=`which clang++`export CC=`which clang`export CPP="`which clang` -E -std=c++11 -stdlib=libc++"export LINK="`which clang++` -std=c++11 -stdlib=libc++"export CXX_host=`which clang++`export CC_host=`which clang`export CPP_host="`which clang` -E"export LINK_host=`which clang++`export GYP_DEFINES="clang=1 mac_deployment_target=10.9"

然后您可以正常运行您的make whatever 命令。

显然,需要安装 xcode 才能存在 clang 和 clang++。

关于c++ - 尝试嵌入 v8 的链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25645304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com