arm32v7 / ubuntu docker изображение не может загрузить, поэтому файл - PullRequest
0 голосов
/ 17 июня 2020

Я запускаю образ arm32v7 / ubuntu на моем сервере x86 с qemu, шаг настройки среды примерно такой:

## compile qemu static
apt build-dep qemu
git clone --depth 1 git://git.qemu.org/qemu.git
cd qemu
git submodule update --init --recursive 
./configure --prefix=$(cd ..; pwd)/qemu-user-static --static --disable-system --enable-linux-user 
make -j8
make install

Затем я запускаю образ docker на моем сервере x86:

cd ../qemu-user-static
docker run -v `pwd`/qemu-user-static/bin/qemu-arm-static:/usr/bin/qemu-arm-static -ti arm32v7/ubuntu uname -m

Результат будет armv7l.

Затем я компилирую свой код в своей среде x86 с помощью компилятора arm toolchains. Код такой:

// main.cpp
#include "fun.hpp"

int main() {
    print();
}

// fun.hpp
void print();

// fun.cpp
#include <iostream>
#include "fun.hpp"

using namespace std;

void print() {
    cout << "hello world" << endl;
}

Мой CMakeLists.txt выглядит так:

cmake_minimum_required(VERSION 2.8.12)
project(example)

include_directories(./)
link_directories(./build)
link_directories(./)

set(toolchain_dir /opt/hisi-linux/x86-arm/arm-himix200-linux)
SET(CMAKE_C_COMPILER ${toolchain_dir}/bin/arm-himix200-linux-gcc)
SET(CMAKE_CXX_COMPILER ${toolchain_dir}/bin/arm-himix200-linux-g++)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv7-a -mfpu=neon  -mfloat-abi=softfp -fPIC -fno-lto -lgomp")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv7-a -mfpu=neon 7")

set(CMAKE_LINKER "${toolchain_dir}/bin/arm-himix200-linux-ar")
set(CMAKE_AR "${toolchain_dir}/bin/arm-himix200-linux-ar")

set( CMAKE_BUILD_TYPE "Release" )
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC  -lgomp -fno-lto -O3  -Wall -s")
add_compile_options(-Os -s -fPIC  -fvisibility-inlines-hidden -ffunction-sections -fdata-sections)
add_link_options(-Wl,--gc-sections -Wl,--strip-all)


add_executable(main main.cpp)
target_link_libraries(main -ltest)

add_library(test SHARED ./fun.cpp)

После кросс-компиляции на моей платформе x86:

mkdir -p build && cd build
cmake ..
make

Я получаю файлы main и libtest.so. Затем я попытался запустить его в среде arm32v7/ubuntu на основе qemu. Я получил сообщение об ошибке:

./main: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory

Также я заметил, что если я не использую разделяемую память и скомпилирую весь код в один исполняемый файл, проблем с его запуском в руке docker не будет. . В чем проблема и как я могу ее решить, пожалуйста?

...