LINUX.ORG.RU

[CMAKE]кросскомпиляция либы

 


0

0

Просто так либа собирается без проблем, но когда пытаюсь кросскомпилировать под mipsel, cmake отказывается находить ar.

Делаю так:

mkdir build_mipsel
cd build_mipsel
cmake -DCMAKE_TOOLCHAIN_FILE=../mipsel_toolchains.cmake ..
make VERBOSE=1

mipsel_toolchains.cmake такой:

set(CMAKE_SYSTEM_MAKE Linux)

set(CMAKE_C_COMPILER   mipsel-linux-gcc)
set(CMAKE_CXX_COMPILER mipsel-linux-g++)
set(CMAKE_AR mipsel-linux-ar)

set(CMAKE_FIND_ROOT_PATH /opt/toolchains/uclibc-crosstools)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

В выводе make VERBOSE=1 вместо /opt/toolchains/uclibc-crosstools/bin/mipsel-linux-ar пустая строка «» и пишет Error running link command: No such file or directory.

mipsel-linux-ar в системе, ессно, присутствует. Никак не пойму, какого gcc, g++ он находит, а ar нет?

★★
Ответ на: комментарий от anon_666

Не, ну так-то есно работает. Еще можно так: set(CMAKE_AR /opt/toolchains/uclibc-crosstools/bin/mipsel-linux-ar)

Вопрос в том, какого cmake сам не находит его?

kulti ★★
() автор топика

Помню была похожая проблема, точно не скажу как лечил, но в итоге toolchain-скрипт выглядит так:

# CMake toolchain file for building MIPS software on OI environment

# this one is important
SET(CMAKE_SYSTEM_NAME Linux)
# this one not so much
SET(CMAKE_SYSTEM_VERSION 1)

# specify the cross compiler
SET(CMAKE_C_COMPILER   /usr/bin/mipsel-ip-linux-gnu-gcc)
SET(CMAKE_CXX_COMPILER /usr/bin/mipsel-ip-linux-gnu-g++)

# where is the target environment
SET(CMAKE_FIND_ROOT_PATH  /usr/mipsel-ip-linux-gnu)

# search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

Как видим, путь к ar отсутствует. Я так понимаю - он сам его находит через путь к gcc.

Dendy ★★★★★
()
Ответ на: комментарий от Dendy

Я так понимаю, статические либы в том проекте не компилились, и ar был не нужен.

Для mingw все работает, но там ar так и зовется ar'ом, без всяких префиксов, типа i586-mingw-

Эх... Что-то меня cmake расстраивать начинает.

kulti ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.