Кросс-компиляция библиотеки WiringPi - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь настроить кросс-компиляцию для Raspberry Pi из Linux Ubuntu VirtualBox.Я клонировал инструментальное хранилище (в отличие от настройки полной сборки crosstool-ng) и смог скомпилировать базовое приложение hellow world и запустить его на своем пи.Сейчас я пытаюсь получить более сложный пример, собирая библиотеку wiringpi через мой процесс кросс-компиляции через cmake, следуя этому руководству: https://medium.com/@au42/the-useful-raspberrypi-cross-compile-guide-ea56054de187

К сожалению, это не работает - я получаю ошибки компиляциииз-за необъявленных функций, которые выглядят как стандартные библиотеки C (time.h).Первые c-файлы (softpwm.c) компилируются сравнительно легко, но вторые (wiringPi.c) выдают ошибки, поскольку включают в себя time.h - и ссылаются на константы, определенные в.

Почти как я могу сказать, крестскомпилированная версия gcc не ищет соответствующие каталоги для заголовков системных библиотек (usr / include / linux | sys | bits).Я убедился, что time.h действительно находится в пути sysroot, указанном в моем файле toolchain, переданном в cmake.

Заметьте, я не написал здесь никакого кода, я просто пытаюсь воспроизвести это руководство, которое создает кросс-скомпилированную версию WiringPi с использованием цепочки инструментов кросс-компиляции.

IЯ пытался добавить определенные каталоги включения в мой файл CMakeLists.txt, но это приводит к другим ошибкам компиляции.Первая библиотека не может быть собрана, так как теперь она не может найти пакет pthreads.

Я также успешно построил пример GNU, используя basic time.h, используя мой процесс кросс-компиляции, чтобы увидеть, есть ли проблема сустановка инструмента.Это сработало скомпилировано нормально.

Я включил подробные опции makefile, -v и -Wall, чтобы понять, что происходит, а что может отсутствовать.

cmake . -DCMAKE_TOOLCHAIN_FILE=Toolchain-rpi.cmake
make

И мой файл Toolchain-rpi.cmake:

# Define our host system
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_VERSION 1)
SET(PITOOL "/home/greg/sanitaslabs/cacheq/raspi/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf")
#set(SYSROOT "${PITOOL}/arm-linux-gnueabihf/sysroot")
set(SYSROOT "${PITOOL}/arm-linux-gnueabihf/sysroot")

# Define the cross compiler locations
#SET(CMAKE_C_COMPILER /home/greg/sanitaslabs/cacheq/raspi/tools/arm- 
bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc)
SET(CMAKE_C_COMPILER ${PITOOL}/bin/arm-linux-gnueabihf-gcc)
#SET(CMAKE_CXX_COMPILER 
/home/greg/sanitaslabs/cacheq/raspi/tools/arm-bcm2708/arm-rpi-4.9.3- 
linux-gnueabihf/bin/arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER ${PITOOL}/bin/arm-linux-gnueabihf-g++)
# Define the sysroot path for the RaspberryPi distribution in our 
tools folder 
#SET(CMAKE_FIND_ROOT_PATH ${SYSROOT})
# Use our definitions for compiler tools
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# Search for libraries and headers in the target directories only
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
add_definitions(-v -Wall -std=c11)

Ошибка:

/home/greg/sanitaslabs/cacheq/raspi/wiringPi/wiringPi/wiringPi.c:2058:3: warning: implicit declaration of function 'clock_gettime' [-Wimplicit-function-declaration]
   clock_gettime (CLOCK_MONOTONIC_RAW, &ts) ;
   ^
/home/greg/sanitaslabs/cacheq/raspi/wiringPi/wiringPi/wiringPi.c:2058:18: error: 'CLOCK_MONOTONIC_RAW' undeclared (first use in this function)
   clock_gettime (CLOCK_MONOTONIC_RAW, &ts) ;
                  ^
...