gpt4 book ai didi

c++ - 如何在 64 位 Ubuntu 18.04 上使用 64 位 clang v8 构建 32 位 libc++?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:02:54 26 4
gpt4 key购买 nike

使用 Dockerfile,我正在尝试构建 Clang 版本 v8 及其对 Ubuntu 18.04 的依赖项。我遇到这些麻烦的原因是因为我找不到 32 位版本的 LLVM 库。甚至 LLVM 包本身也只有 64 位变体。因此,我无法使用版本 8 的 LLVM 工具链构建我的 32 位应用程序。使用版本 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 started页面了解到目前为止如何构建 LLVM,但我一定遗漏了一些东西。他们并没有在他们的示例中完全进入 32 位编译。有人可以帮我得到这栋楼吗?或者至少(可能更好)给我指出一个捆绑了 32 位 LLVM 库的 Clang v8 版本?

最佳答案

似乎您正在链接错误的 Python:usr/lib/x86_64-linux-gnu/libpython2.7.so

您可能想要将其添加到 CMake 命令中:

-DPYTHON_EXECUTABLE=PATH_TO_PYTHON-DEV:i686

您可能还需要设置 PYTHON_LIBRARYPYTHON_INCLUDE_DIR 以确保使用 i386 版本。

关于c++ - 如何在 64 位 Ubuntu 18.04 上使用 64 位 clang v8 构建 32 位 libc++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55614083/

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