Ошибка компоновщика при попытке вставить v8

Я пытаюсь создать простую программу, в которую встроил движок Google V8 Javascript. Инструкции кажутся простыми, но я получаю странную ошибку ссылки.

Я нахожусь на Mac OS X 10.9, и я использую Xamarin Studio в качестве своей IDE, которая, кажется, использует g ++ в качестве компилятора.

Я скомпилировал v8 используя инструкции на их сайте. В частности, после всех make dependenciesЯ побежал:

make x64.release

Это казалось, чтобы завершить успешно.

Вот вывод, который я получаю, когда пытаюсь построить свой проект:

g ++ -o "/ Пользователи / Майк / Проекты / 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 версия 5.1 (clang -503.0.40) (на основе LLVM 3.4svn)
Цель: x86_64-apple-darwin13.3.0
Модель потока: 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 -llat8 -lc ++ -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/5.1/lib/darwin/libclang_rt.osx.a
Неопределенные символы для архитектуры x86_64:
"std :: string :: c_str () const", на которую ссылаются из:
v8 :: internal :: Logger :: SharedLibraryEvent (std :: string const, длинный без знака, длинный без знака) в libv8_base.a (log.o)
"std :: allocator :: allocator ()", на который ссылаются из:
v8 :: base :: OS :: GetSharedLibraryAddresses () в libv8_libbase.a (платформа-macos.o)
"std :: allocator :: ~ allocator ()", на который ссылаются из:
v8 :: base :: OS :: GetSharedLibraryAddresses () в libv8_libbase.a (платформа-macos.o)
"std :: basic_string, std :: allocator> :: basic_string (char const *, std :: allocator const)", на который ссылаются из:
v8 :: base :: OS :: GetSharedLibraryAddresses () в libv8_libbase.a (платформа-macos.o)
"std :: basic_string, std :: allocator> :: basic_string (std :: string const)", на который ссылаются из:
v8 :: base :: OS :: SharedLibraryAddress :: SharedLibraryAddress (v8 :: base :: OS :: SharedLibraryAddress const) в libv8_libbase.a (платформа-macos.o)
v8 :: base :: OS :: SharedLibraryAddress :: SharedLibraryAddress (std :: string const, unsigned long, unsigned long) в libv8_libbase.a (platform-macos.o)
"std :: basic_string, std :: allocator> :: ~ basic_string ()", на которую ссылаются из:
v8 :: base :: OS :: SharedLibraryAddress :: ~ SharedLibraryAddress () в libv8_base.a (log.o)
v8 :: base :: OS :: GetSharedLibraryAddresses () в libv8_libbase.a (платформа-macos.o)
v8 :: base :: OS :: SharedLibraryAddress :: ~ SharedLibraryAddress () в libv8_libbase.a (платформа-macos.o)
"std :: string :: operator = (std :: string const)", на который ссылаются из:
v8 :: base :: OS :: SharedLibraryAddress :: operator = (v8 :: base :: OS :: SharedLibraryAddress const) в libv8_libbase.a (платформа-macos.o)
"std :: _ Rb_tree_decrement (std :: _ Rb_tree_node_base *)", на который ссылаются из:
std :: _ Rb_tree_iterator> :: operator - () в libv8_base.a (alloc-tracker.o)
std :: _ Rb_tree_iterator> :: operator - () в libv8_base.a (lithium-codegen.o)
std :: _ Rb_tree_iterator :: operator - () в libv8_base.a (verifyier.o)
std :: _ Rb_tree_iterator :: operator - () в libv8_base.a (инструкция.o)
std :: _ Rb_tree_iterator> :: operator - () в libv8_base.a (инструкция-выборщик.o)
std :: _ Rb_tree_iterator :: operator - () в libv8_base.a (typer.o)
std :: _ Rb_tree_iterator :: operator - () в libv8_base.a (graph-visualizer.o)
...
"std :: _ Rb_tree_increment (std :: _ Rb_tree_node_base const *)", на который ссылаются из:
std :: _ Rb_tree_const_iterator> :: operator ++ () в libv8_base.a (lithium.o)
std :: _ Rb_tree_const_iterator :: operator ++ () в libv8_base.a (verifyier.o)
std :: _ Rb_tree_const_iterator> :: operator ++ () в libv8_base.a (инструкция.о)
std :: _ Rb_tree_const_iterator :: operator ++ () в libv8_base.a (typer.o)
std :: _ Rb_tree_const_iterator :: operator ++ () в libv8_base.a (graph-visualizer.o)
"std :: _ Rb_tree_increment (std :: _ Rb_tree_node_base *)", на который ссылаются из:
std :: _ Rb_tree_iterator> :: operator ++ () в libv8_base.a (alloc-tracker.o)
std :: _ Rb_tree_iterator> :: operator ++ (int) в libv8_base.a (alloc-tracker.o)
"std :: __ throw_length_error (char const *)", на который ссылаются из:
std :: vector> :: _ M_insert_aux (__gnu_cxx :: __ normal_iterator>>, v8 :: base :: OS :: SharedLibraryAddress const) в libv8_libbase.a (платформа-macos.o)
std :: vector> :: _ M_insert_aux (__gnu_cxx :: __ normal_iterator>>, v8 :: internal :: compiler :: Reducer * const) в libv8_base.a (pipeline.o)
std :: vector> :: _ M_fill_insert (__gnu_cxx :: __ normal_iterator>>, unsigned long, v8 :: internal :: compiler :: Node * const) в libv8_base.a (ast-graph-builder.o)
std :: vector> :: _ M_insert_aux (__gnu_cxx :: __ normal_iterator>>, v8 :: internal :: compiler :: Node * const) в libv8_base.a (ast-graph-builder.o)
std :: vector> :: _ M_insert_aux (__gnu_cxx :: __ normal_iterator>>, v8 :: internal :: compiler :: FrameStateDescriptor * const) в libv8_base.a (инструкция.о)
std :: vector> :: _ M_insert_aux (__gnu_cxx :: __ normal_iterator>>, v8 :: internal :: compiler :: Node * const) в libv8_base.a (упрощенный-понижающий.o)
std :: vector> :: reserve (без знака long) в libv8_base.a (инструкция-выборщик.o)
...
"std :: __ throw_out_of_range (char const *)", на который ссылаются из:
std :: vector> :: _ M_range_check (unsigned long) const в libv8_base.a (graph-reducer.o)
std :: vector> :: _ M_range_check (unsigned long) const в libv8_base.a (ast-graph-builder.o)
std :: vector> :: _ M_range_check (unsigned long) const в libv8_base.a (verifyier.o)
std :: vector> :: _ M_range_check (unsigned long) const в libv8_base.a (verifyier.o)
std :: vector> :: _ M_range_check (unsigned long) const в libv8_base.a (graph-replay.o)
std :: vector> :: _ M_range_check (unsigned long) const в libv8_base.a (js-context-specialization.o)
std :: vector> :: _ M_range_check (unsigned long) const в libv8_base.a (graph-builder.o)
...
"std :: _ Rb_tree_rebalance_for_erase (std :: _ Rb_tree_node_base *, std :: _ Rb_tree_node_base)", на который ссылаются из:
std :: _ Rb_tree, std :: _ Select1st>, std :: less, std :: allocator>> :: erase (std :: _ Rb_tree_iterator>) в libv8_base.a (alloc-tracker.o)
"std :: _ Rb_tree_insert_and_rebalance (bool, std :: _ Rb_tree_node_base *, std :: _ Rb_tree_node_base *, std :: _ Rb_tree_node_base)", на который ссылаются из:
std :: _ Rb_tree, std :: _ Select1st>, std :: less, std :: allocator>> :: _ M_insert (std :: _ Rb_tree_node_base *, std :: _ Rb_tree_node_base *, std :: pair const) в libv8_base.a (выделение -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) в 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) в libv8_base. а (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) в libv8_base.a (инструкция.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) в libv8_base. а (инструкция-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) в libv8_base. а (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) в libv8_base. а (граф-visualizer.o)
...
ld: символы не найдены для архитектуры x86_64
clang: error: команда компоновщика завершилась неудачно с кодом выхода 1 (используйте -v для просмотра вызова)

У меня такое чувство, что я неправильно скомпилировал v8, или, возможно, для другого компилятора, но я не могу найти способ настроить это. Кто-нибудь еще видел это?

1

Решение

Я понял это. У меня было две проблемы:

  1. Я был смущен тем, какой компилятор я на самом деле использовал. В OSX g ++ фактически является символической ссылкой на clang ++, поэтому мне нужно было скомпилировать V8 с использованием соглашений Clang, а не g ++

  2. Инструкции по компиляции с помощью clang на странице Google неверны, из-за этой ошибки: https://code.google.com/p/v8/issues/detail?id=3072

Для справки, чтобы скомпилировать с помощью clang, вам нужно настроить свою среду следующим образом

экспорт CXX = `какой лязг ++`
экспорт CC = `какой лязг`
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 = `который звонит`
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 ++.

3

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector