lld-link: error: < root & gt ;: неопределенный символ: mainCRTStartup при сборке V8

Если вам нужна быстрая скорость чтения, лучшим вариантом является использование таблицы закрытия. Таблица закрытия содержит строку для каждой пары предков / потомков. Итак, в вашем примере таблица закрытия будет выглядеть как

ancestor | descendant | depth
0        | 0          | 0
0        | 19         | 1
0        | 20         | 2
0        | 21         | 3
0        | 22         | 4
19       | 19         | 0
19       | 20         | 1
19       | 21         | 3
19       | 22         | 4
20       | 20         | 0
20       | 21         | 1
20       | 22         | 2
21       | 21         | 0
21       | 22         | 1
22       | 22         | 0

. После того, как у вас есть эта таблица, иерархические запросы становятся очень легкими и быстрыми. Чтобы получить всех потомков категории 20:

SELECT cat.* FROM categories_closure AS cl
INNER JOIN categories AS cat ON cat.id = cl.descendant
WHERE cl.ancestor = 20 AND cl.depth > 0

Конечно, существует большой недостаток, когда вы используете денормализованные данные, подобные этому. Вам нужно поддерживать таблицу закрытия рядом с таблицей категорий. Лучший способ, вероятно, использовать триггеры, но несколько сложно правильно отслеживать вставки / обновления / удаления для таблиц закрытия.

Редактирование: см. Вопрос Какие существуют варианты хранения иерархических данных в реляционной базе данных?

g0] для получения дополнительных опций. Существуют различные оптимальные решения для разных ситуаций.

0
задан James Wilkins 3 March 2019 в 08:13
поделиться

1 ответ

Хорошо, похоже, моей первой ошибкой было изменение приглашения на v8\tools\dev\ и работа оттуда. «Нормальные» шаги, которые я обнаружил, на самом деле работают правильно только из корня исходного кода. Я закончил с v8\tools\dev\out\x64.release, затем ninja -C out/x64.release v8 потерпел неудачу, потому что v8 не был принят в этой установке по какой-то причине.

Другое, что я сделал, - отредактировал файл args.gn напрямую и сохранил его. ПРАВИЛЬНЫЙ процесс заключается в запуске gn args out.gn\x64.release, чтобы после сохранения И закрытия редактора он автоматически заново генерировал / обновлял файлы. Скорее всего, изменение файла само по себе не повлияет, и вы запутаетесь, потому что ninja даже не увидит изменения.

Ошибка компоновщика в поврежденных файлах из-за того, что is_clang по умолчанию имеет значение true. Настройка is_clang=false исправляет эту ошибку. Это просто работает, я понятия не имею, почему; просто возьми и иди ...;)

Правильный путь от корня, который работал для меня, это:

python tools\dev\v8gen.py x64.release
python tools\dev\v8gen.py ia32.release
python tools\dev\v8gen.py x64.debug
python tools\dev\v8gen.py ia32.debug

Это выдаст файлы, которые могут быть скомпилированы в "v8 \ out.gn ".

Подсказка: Запустите «python tools \ dev \ v8gen.py list», чтобы увидеть список возможных конфигураций сборки.

Затем я обновил аргументы сборки:

gn args out.gn\x64.release

Используя их:

 is_debug = false                      <-(or true for debug builds)
 target_cpu = "x64"
 is_component_build = false
 v8_static_library = true
 use_custom_libcxx = false
 use_custom_libcxx_for_host = false
 v8_use_external_startup_data = false  <-(or true to use the bin startup files)
 is_clang = false

И снова для 32-битной версии (изменив "x64" выше на "x86" из Конечно):

gn args out.gn\ia32.release

Затем повторили все вышеперечисленное для x64.debug и ia32.debug.

И скомпилировали их:

ninja -C out.gn/x64.debug v8
ninja -C out.gn/ia32.debug v8
ninja -C out.gn/x64.release v8
ninja -C out.gn/ia32.release v8

Visual Studio 2017 теперь строит и снова связывает мой проект с ними (это был старый проект, который я воскресил).

Примечание. Связывание с отладочными версиями библиотек V8 может привести к ошибке, которая не соответствует _ITERATOR_DEBUG_LEVEL. Чтобы это исправить, я просто зашел в настройки проекта C ++ (Confiuration Properties->C/C++->Preprocessor->Preprocesor Definitions) и добавил ;_ITERATOR_DEBUG_LEVEL=0, чтобы он совпадал.

0
ответ дан James Wilkins 3 March 2019 в 08:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: