Как мне собрать 32-битную libc ++ с 64-битным clang v8 на 64-битной Ubuntu 18.04? - PullRequest
0 голосов
/ 10 апреля 2019

Используя Dockerfile, я пытаюсь собрать версию Clang v8 вместе с ее зависимостями от Ubuntu 18.04. Причина, по которой я прохожу все эти проблемы, заключается в том, что я не могу найти 32-битную версию библиотек LLVM. Даже сами пакеты LLVM имеют только 64-битные варианты всего. Из-за этого я не могу создавать свои 32-битные приложения, используя набор инструментов LLVM в версии 8. Использование версии 8 LLVM является обязательным по причинам, которые я здесь не буду описывать.

Пока вот что у меня есть:

FROM ubuntu:18.04 AS build

ARG NUM_PARALLEL=8

RUN true \
    && dpkg --add-architecture i386 \
    && apt-get -qq update \
    && apt-get -qq install \
        software-properties-common \
        build-essential \
        gcc-multilib \
        g++-multilib \
        git \
        wget \
        autoconf \
        pkg-config \
        m4 \
        python-dev:i386 \
        libcurl4-gnutls-dev:i386 \
        libncurses-dev:i386 \
        uuid-dev:i386 \
        libx11-dev:i386 \
        libxext-dev:i386 \
        libtinfo-dev:i386 \
        libedit-dev:i386 \
        swig \
        libedit-dev
        python-dev

ENV CMAKE_BUILD_PARALLEL_LEVEL=$NUM_PARALLEL

# Ninja
RUN true \
    && git clone --depth 1 --branch v1.8.2 https://github.com/ninja-build/ninja.git \
    && cd ninja \
    && ./configure.py --bootstrap \
    && cp ninja /usr/local/bin

# CMake
RUN true \
    && git clone --depth 1 --branch v3.13.4 https://gitlab.kitware.com/cmake/cmake.git \
    && cd cmake \
    && ./bootstrap --parallel=$NUM_PARALLEL \
    && make -j$NUM_PARALLEL install

# Clang (See: https://clang.llvm.org/get_started.html)
RUN true \
    && git clone --depth 1 --branch llvmorg-8.0.0 https://github.com/llvm/llvm-project.git \
    && cd llvm-project \
    && cmake -G Ninja -B build -S llvm \
        -D CMAKE_BUILD_TYPE=Release \
        -D LLVM_BUILD_32_BITS:BOOL=ON \
        -D LLVM_ENABLE_PROJECTS=all \
        -D LLVM_BUILD_TESTS:BOOL=OFF \
        -D LLVM_BUILD_EXAMPLES:BOOL=OFF \
        -D LLVM_INCLUDE_EXAMPLES:BOOL=OFF \
        -D LLVM_INCLUDE_TESTS:BOOL=OFF \
        -D LLVM_INCLUDE_BENCHMARKS:BOOL=OFF \
    && cmake --build build -j $NUM_PARALLEL --target install

Я собрал чуть более 5200 единиц перевода, что занимает больше часа, но только для того, чтобы он потерпел неудачу:

[5232/6435] Linking CXX shared library lib/readline.so
FAILED: lib/readline.so
: && /usr/bin/c++ -fPIC -fPIC -fvisibility-inlines-hidden -m32 -Werror=date-time -std=c++11 -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-maybe-uninitialized -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wno-comment -fdiagnostics-color -ffunction-sections -fdata-sections -Wno-deprecated-declarations -Wno-unknown-pragmas -Wno-strict-aliasing -Wno-deprecated-register -Wno-vla-extension -Wno-macro-redefined -O3 -DNDEBUG  -Wl,-z,defs -Wl,-z,nodelete -m32 -shared -Wl,-soname,readline.so -o lib/readline.so tools/lldb/scripts/Python/modules/readline/CMakeFiles/readline.dir/readline.cpp.o  /usr/lib/x86_64-linux-gnu/libpython2.7.so /usr/lib/x86_64-linux-gnu/libedit.so && :
/usr/lib/x86_64-linux-gnu/libpython2.7.so: error adding symbols: File in wrong format
collect2: error: ld returned 1 exit status

Я следовал за страницей Getting * , чтобы понять, как построить LLVM, но я, должно быть, что-то упустил. Они точно не входят в 32-битную компиляцию в своих примерах. Может ли кто-нибудь помочь мне получить это здание? Или, по крайней мере (и, возможно, лучше), укажите мне версию Clang v8, в которой есть 32-битные библиотеки LLVM?

1 Ответ

3 голосов
/ 10 апреля 2019

Похоже, что вы ссылаетесь на неправильный Python: usr/lib/x86_64-linux-gnu/libpython2.7.so.

Возможно, вы захотите добавить его в команды CMake:

-DPYTHON_EXECUTABLE=PATH_TO_PYTHON-DEV:i686

Возможно, вам также понадобитсяустановить PYTHON_LIBRARY и PYTHON_INCLUDE_DIR, чтобы убедиться, что используются версии i386.

...