Ошибки компоновщика V8 при сборке проекта в Ubuntu (c ++) - PullRequest
0 голосов
/ 31 октября 2018

Я пытался собрать V8 и связать с ним даже самый простой проект в c ++, но продолжаю получать массовые ошибки компоновщика, касающиеся libc ++, но я не уверен, как его решить. (большая часть моего опыта работы с c ++ связана с Windows, но я строю это на Ubuntu, я пробовал 16.04 и 18.04)

Слишком много ошибок, чтобы публиковать их здесь, но, похоже, все они связаны с std :: __ 1 :: {кое-что}. Вот пример:

main.cpp:(.text+0x53): undefined reference to v8::platform::NewDefaultPlatform(int, v8::platform::IdleTaskSupport, v8::platform::InProcessStackDumping, std::unique_ptr<v8::TracingController, std::default_delete<v8::TracingController> >)'
./v8/out.gn/x64.release/obj//libv8_monolith.a(api.o): In function `v8::SnapshotCreator::CreateBlob(v8::SnapshotCreator::FunctionCodeHandling)':
api.cc:(.text._ZN2v815SnapshotCreator10CreateBlobENS0_20FunctionCodeHandlingE+0x10e7): undefined reference to `std::__1::__vector_base_common<true>::__throw_length_error() const'
api.cc:(.text._ZN2v815SnapshotCreator10CreateBlobENS0_20FunctionCodeHandlingE+0x10f3): undefined reference to `std::__1::__vector_base_common<true>::__throw_length_error() const'

Содержимое main.cpp:

#include <v8.h>
#include <libplatform/libplatform.h>

int main(int argc, char** argv) {
        v8::V8::InitializeICU();
        std::unique_ptr<v8::Platform> platform = v8::platform::NewDefaultPlatform();

        return 0;
}

Команда, которую я использовал для ее построения:

g++ -I. -I./v8/include main.cpp -o testv8 -lv8_monolith -L./v8/out.gn/x64.release/obj/ -pthread -std=c++0x

Это документ, который я использовал для сборки V8 и использовал в качестве ссылки для команды: https://v8.dev/docs/embed

Дайте мне знать, если потребуется дополнительная информация, заранее спасибо!

EDIT: Все учебные пособия и примеры кода содержат «#include », и пакет ubuntu, похоже, его пропускает. Это все файлы в пакетах Ubuntu V8:

$ apt list --installed | grep v8
libv8-3.14.5/bionic,now 3.14.5.8-11ubuntu1 amd64 [installed,automatic]
libv8-dev/bionic,now 3.14.5.8-11ubuntu1 amd64 [installed]

$ dpkg -L libv8-3.14.5
/.
/usr
/usr/lib
/usr/lib/libv8.so.3.14.5
/usr/share
/usr/share/doc
/usr/share/doc/libv8-3.14.5
/usr/share/doc/libv8-3.14.5/AUTHORS
/usr/share/doc/libv8-3.14.5/README.Debian.security
/usr/share/doc/libv8-3.14.5/changelog.Debian.gz
/usr/share/doc/libv8-3.14.5/copyright

$ dpkg -L libv8-dev
/.
/usr
/usr/include
/usr/include/v8-debug.h
/usr/include/v8-preparser.h
/usr/include/v8-profiler.h
/usr/include/v8-testing.h
/usr/include/v8.h
/usr/include/v8stdint.h
/usr/lib
/usr/share
/usr/share/doc
/usr/share/doc/libv8-dev
/usr/share/doc/libv8-dev/copyright
/usr/share/doc/libv8-dev/examples
/usr/share/doc/libv8-dev/examples/count-hosts.js
/usr/share/doc/libv8-dev/examples/lineprocessor.cc.gz
/usr/share/doc/libv8-dev/examples/process.cc.gz
/usr/share/doc/libv8-dev/examples/samples.gyp
/usr/share/doc/libv8-dev/examples/shell.cc.gz
/usr/lib/libv8.so
/usr/share/doc/libv8-dev/AUTHORS
/usr/share/doc/libv8-dev/changelog.Debian.gz

РЕШЕНИЕ: установка пакетов libc ++ - dev и clang ubuntu и использование этой строки для компиляции сделали все работоспособным:

clang++ -I. -I./v8/include main.cpp -o testv8 -lv8_monolith -L./v8/out.gn/x64.release/obj/ -pthread -std=c++0x -stdlib=libc++
...