Правильная ссылка на aarch64-linux-android libstd для исправления «неправильного выравнивания для перемещения R_AARCH64_Android

Форум для тех, кто программирует под Android
Anonymous
Правильная ссылка на aarch64-linux-android libstd для исправления «неправильного выравнивания для перемещения R_AARCH64_

Сообщение Anonymous »

Я выполняю кросс-компиляцию (канадская сборка) AVR-GCC 7.3.0 для работы на aarch64-linux-android (типичные 64-битные устройства Android) с Android NDK r29 в Ubuntu. Во время сборки я получаю:

Код: Выделить всё

...
/home/anton/tools/android-ndk-r29/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android23-clang++ -fno-PIE -c   -falign-functions=8 -falign-jumps=8 -falign-labels=8 -falign-loops=8 -std=c++11 -DIN_GCC  -DCROSS_DIRECTORY_STRUCTURE  -fno-strict-aliasing -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings   -DHAVE_CONFIG_H -I. -I. -I../../gcc -I../../gcc/. -I../../gcc/../include -I../../gcc/../libcpp/include -I/home/anton/tools/avr-gcc2/gcc-7.3.0/build/./gmp -I/home/anton/tools/avr-gcc2/gcc-7.3.0/gmp -I/home/anton/tools/avr-gcc2/gcc-7.3.0/build/./mpfr/src -I/home/anton/tools/avr-gcc2/gcc-7.3.0/mpfr/src -I/home/anton/tools/avr-gcc2/gcc-7.3.0/mpc/src  -I../../gcc/../libdecnumber -I../../gcc/../libdecnumber/dpd -I../libdecnumber -I../../gcc/../libbacktrace -I/home/anton/tools/avr-gcc2/gcc-7.3.0/build/./isl/include -I/home/anton/tools/avr-gcc2/gcc-7.3.0/isl/include  -o read-md.o -MT read-md.o -MMD -MP -MF ./.deps/read-md.TPo ../../gcc/read-md.c
...
/home/anton/tools/android-ndk-r29/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar rc libcommon-target.a avr-common.o prefix.o ... read-md.o
...
/home/anton/tools/android-ndk-r29/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android23-clang++ -fno-PIE -c  -DIN_GCC_FRONTEND -falign-functions=8 -falign-jumps=8 -falign-labels=8 -falign-loops=8 -std=c++11 -DIN_GCC  -DCROSS_DIRECTORY_STRUCTURE  -fno-strict-aliasing -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings   -DHAVE_CONFIG_H -I. -I. -I../../gcc -I../../gcc/.  -I../../gcc/../include -I../../gcc/../libcpp/include -I/home/anton/tools/avr-gcc2/gcc-7.3.0/build/./gmp -I/home/anton/tools/avr-gcc2/gcc-7.3.0/gmp -I/home/anton/tools/avr-gcc2/gcc-7.3.0/build/./mpfr/src -I/home/anton/tools/avr-gcc2/gcc-7.3.0/mpfr/src -I/home/anton/tools/avr-gcc2/gcc-7.3.0/mpc/src  -I../../gcc/../libdecnumber -I../../gcc/../libdecnumber/dpd -I../libdecnumber -I../../gcc/../libbacktrace -I/home/anton/tools/avr-gcc2/gcc-7.3.0/build/./isl/include -I/home/anton/tools/avr-gcc2/gcc-7.3.0/isl/include  -o cc1-checksum.o -MT cc1-checksum.o -MMD -MP -MF ./.deps/cc1-checksum.TPo cc1-checksum.c
clang++: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated [-Wdeprecated]
clang++: warning: optimization flag '-falign-jumps=8' is not supported [-Wignored-optimization-argument]
clang++: warning: optimization flag '-falign-labels=8' is not supported [-Wignored-optimization-argument]
/home/anton/tools/android-ndk-r29/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android23-clang++ -no-pie   -falign-functions=8 -falign-jumps=8 -falign-labels=8 -falign-loops=8 -std=c++11 -DIN_GCC  -DCROSS_DIRECTORY_STRUCTURE  -fno-strict-aliasing -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings   -DHAVE_CONFIG_H  -o cc1 c/c-lang.o c-family/stub-objc.o attribs.o c/c-errors.o c/c-decl.o c/c-typeck.o c/c-convert.o c/c-aux-info.o c/c-objc-common.o c/c-parser.o c/c-array-notation.o c/c-fold.o c/gimple-parser.o c-family/c-common.o c-family/c-cppbuiltin.o c-family/c-dump.o c-family/c-format.o c-family/c-gimplify.o c-family/c-indentation.o c-family/c-lex.o c-family/c-omp.o c-family/c-opts.o c-family/c-pch.o c-family/c-ppoutput.o c-family/c-pragma.o c-family/c-pretty-print.o c-family/c-semantics.o c-family/c-ada-spec.o c-family/c-cilkplus.o c-family/array-notation-common.o c-family/cilk.o c-family/c-ubsan.o c-family/c-attribs.o c-family/c-warn.o avr-c.o default-c.o \
cc1-checksum.o libbackend.a main.o libcommon-target.a libcommon.a ../libcpp/libcpp.a ../libdecnumber/libdecnumber.a libcommon.a ../libcpp/libcpp.a   ../libbacktrace/.libs/libbacktrace.a ../libiberty/libiberty.a ../libdecnumber/libdecnumber.a  -L/home/anton/tools/avr-gcc2/gcc-7.3.0/build/./isl/.libs  -lisl -L/home/anton/tools/avr-gcc2/gcc-7.3.0/build/./gmp/.libs -L/home/anton/tools/avr-gcc2/gcc-7.3.0/build/./mpfr/src/.libs -L/home/anton/tools/avr-gcc2/gcc-7.3.0/build/./mpc/src/.libs -lmpc -lmpfr -lgmp   -L./../zlib -lz
ld.lld: error: c-family/c-opts.o:(function c_common_post_options(char const**): .text+0x2558): improper alignment for relocation R_AARCH64_LDST64_ABS_LO12_NC: 0x17B3724 is not aligned to 8 bytes
ld.lld: error: libbackend.a(ggc-page.o):(function debug_print_page_list(int): .text+0x9c): improper alignment for relocation R_AARCH64_LDST64_ABS_LO12_NC: 0x17B3724 is not aligned to 8 bytes
ld.lld: error: libbackend.a(ggc-page.o):(function init_ggc(): .text+0x13fc): improper alignment for relocation R_AARCH64_LDST64_ABS_LO12_NC: 0x17B3724 is not aligned to 8 bytes
ld.lld: error: libbackend.a(dumpfile.o):(function gcc::dump_manager::dump_start(int, int*): .text+0xe30): improper alignment for relocation R_AARCH64_LDST64_ABS_LO12_NC: 0x17B3724 is not aligned to 8 bytes
ld.lld: error: libbackend.a(dumpfile.o):(function dump_open_alternate_stream(dump_file_info*): .text+0x11d4): improper alignment for relocation R_AARCH64_LDST64_ABS_LO12_NC: 0x17B3724 is not aligned to 8 bytes
ld.lld: error: libbackend.a(dumpfile.o):(function gcc::dump_manager::dump_begin(int, int*): .text+0x14d8): improper alignment for relocation R_AARCH64_LDST64_ABS_LO12_NC: 0x17B3724 is not aligned to 8 bytes
ld.lld: error: libbackend.a(dumpfile.o):(function dump_end(int, __sFILE*): .text+0x16d4): improper alignment for relocation R_AARCH64_LDST64_ABS_LO12_NC: 0x17B3724 is not aligned to 8 bytes
ld.lld: error: libbackend.a(read-md.o):(function md_reader::print_md_ptr_loc(void const*): .text+0x35c): improper alignment for relocation R_AARCH64_LDST64_ABS_LO12_NC: 0x17B3724 is not aligned to 8 bytes
ld.lld: error: libbackend.a(read-md.o):(function md_reader::print_c_condition(char const*): .text+0x7bc): improper alignment for relocation R_AARCH64_LDST64_ABS_LO12_NC: 0x17B3724 is not aligned to 8 bytes
ld.lld: error: libbackend.a(toplev.o):(function init_asm_output(char const*): .text+0x424c): improper alignment for relocation R_AARCH64_LDST64_ABS_LO12_NC: 0x17B3724 is not aligned to 8 bytes
ld.lld: error: libbackend.a(toplev.o):(function init_asm_output(char const*): .text+0x431c): improper alignment for relocation R_AARCH64_LDST64_ABS_LO12_NC: 0x17B3724 is not aligned to 8 bytes
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
../../gcc/c/Make-lang.in:85:  recipe for target 'cc1' failed
Как видите, я добавил несколько аргументов компиляции (

Код: Выделить всё

-falign-...
) для выравнивания, и я вижу, что он действительно использовался во время связывания (безуспешно).
Это конфигурация:

Код: Выделить всё

export PREFIX=$(pwd)/android-avr-toolchain-local
export PREFIX_LOCAL=$(pwd)/android-avr-toolchain-local
export PATH=$PREFIX/bin:$PATH

# Android NDK path (adjust accordingly)
export NDK=/home/anton/tools/android-ndk-r29
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
export SYSROOT=$PREFIX/sysroot
export ALIGN_FLAGS="-falign-functions=8 -falign-jumps=8 -falign-labels=8 -falign-loops=8"

mkdir -p $PREFIX

export PATH="$TOOLCHAIN/bin:$PATH:/home/anton/tools/android-ndk-r29-arm64-23/bin"

# Configure for AVR target with Android aarch64 host
../configure \
--build=x86_64-linux-gnu \
--host=aarch64-linux-android \
--target=$AVR_TARGET \
--prefix=$PREFIX \
--enable-languages=c,c++ \
--enable-fixed-point \
--disable-libssp \
--disable-libada \
--disable-shared \
--disable-nls \
--with-dwarf2 \
--disable-doc \
--enable-lto \
--enable-plugins \
--with-sysroot=$SYSROOT \
--with-avrlibc \
--disable-gcov \
--disable-coverage \
--with-pkgversion="AVR-GCC" \
CC=$TOOLCHAIN/bin/aarch64-linux-android23-clang \
CXX=$TOOLCHAIN/bin/aarch64-linux-android23-clang++ \
AR=$TOOLCHAIN/bin/llvm-ar \
RANLIB=$TOOLCHAIN/bin/llvm-ranlib \
AS=$TOOLCHAIN/bin/llvm-as \
LD=$TOOLCHAIN/bin/aarch64-linux-android-ld \
CFLAGS="$CFLAGS $ALIGN_FLAGS" \
CXXFLAGS="$CXXFLAGS $ALIGN_FLAGS -std=c++11" \
CFLAGS_FOR_BUILD="$ALIGN_FLAGS" \
CXXFLAGS_FOR_BUILD="$ALIGN_FLAGS -std=c++11" \
CFLAGS_FOR_TARGET="$ALIGN_FLAGS" \
CXXFLAGS_FOR_TARGET="$ALIGN_FLAGS -std=c++11" \
LDFLAGS_FOR_BUILD="-fuse-ld=bfd" \
LDFLAGS_FOR_TARGET="-fuse-ld=bfd"
Поскольку я использую NDK 29, я предполагаю, что конфигурация размера страницы 16 КБ встроена.
Что не так? Любые подсказки приветствуются.

Подробнее здесь: https://stackoverflow.com/questions/797 ... ment-for-r

Вернуться в «Android»