Wiki
Clone wikiroseline / Tutorial 3 - Cross-compiling applications for the platform
Overview
Compiling C or C++ applications on the BeagleBoard Black itself can be extremely tedious, as the platform has limited processing and memory resources. Thankfully, setting up a cross-compiler in Ubuntu Linux is relatively easy. The goal of this tutorial is to install a cross compiler and build a test application for the BeagleBone Black.
First and foremost, install essential build tools, cmake and the C/C++ cross-compilers:
sudo apt-get install build-essential cmake gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
Here's a CMakeLists.txt
build script to cross-compile a simple "hello world" application, which is linked against the version of boost running on the platform. The only tricky thing to note is that you will need a local copy of the root file system used by the BeagleBone Black at some location /path/to/rootfs
.
# Minimum version of CMake required to build this file CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(test) # Cross-compile properties SET(CMAKE_SYSTEM_NAME Linux) SET(CMAKE_SYSTEM_PROCESSOR arm) SET(CMAKE_SYSTEM_VERSION 1) # Specify the cross compiler SET(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc) SET(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++) SET(CMAKE_FIND_ROOT_PATH /path/to/rootfs) # Search for programs in the build host directories SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) # Convenience SET(CMAKE_C_FLAGS "-std=c99") # Preprocessor directive required to link boost trivial logging FIND_PACKAGE(Boost 1.55 REQUIRED COMPONENTS thread system program_options) # Location of header files for the entire project INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} "/path/to/usr/include/arm-linux-gnueabihf") # Location of boost libraries LINK_DIRECTORIES(${Boost_LIBRARY_DIRS} "/path/to/rootfs/usr/arm-linux-gnueabihf/lib") # Test application add_executable(test test.cpp) target_link_libraries(test)
And, here is a simple test application, which should be written to test.cpp
.
#include <iostream> int main(int argc, char *argv[]) { std::cout << "hello world" << std::endl; return 0; }
I always prefer keeping my build products separate from my source. So, I make a build
directory, create the make files and build using four threads (-j4) in the following way:
mkdir build cd build cmake .. make -j4
You can then transfer test
to the BeagleBone Black and run it.
Updated