Created

Embed URL

HTTPS clone URL

SSH clone URL

You can clone with HTTPS or SSH.

Download Gist

Issue with CMake cross-compile and find_library()

View CMakeLists.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
# add ZeroMQ library
if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
 
if (${CMAKE_CROSSCOMPILING})
 
# build with Arm / Pi-compiled libraries
find_library(ZEROMQ_LIB zmq ${PROJECT_SOURCE_DIR}/../lib/linux/pi)
find_library(CZMQ_LIB czmq ${PROJECT_SOURCE_DIR}/../lib/linux/pi)
 
else()
 
# build with 32-bit linux libraries
find_library(ZEROMQ_LIB zmq ${PROJECT_SOURCE_DIR}/../lib/linux/x86)
find_library(CZMQ_LIB czmq ${PROJECT_SOURCE_DIR}/../lib/linux/x86)
 
endif()
 
else()
 
# building for Mac OS X
find_library(ZEROMQ_LIB zmq ${PROJECT_SOURCE_DIR}/../lib/mac)
find_library(CZMQ_LIB czmq ${PROJECT_SOURCE_DIR}/../lib/mac)
 
endif()
View CMakeLists.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
# this one is important
SET (CMAKE_SYSTEM_NAME Linux)
# this one not so much
SET (CMAKE_SYSTEM_VERSION 1)
 
# Check for Raspberry Pi Tools and bail out if they don't have it
if(DEFINED ENV{PI_TOOLS_HOME})
message("Using Raspberry Pi Tools found in $ENV{PI_TOOLS_HOME}")
else()
message("PI_TOOLS_HOME is not set; You must tell CMake where to find Raspberry Pi Tools (cross-compiler)")
return()
endif()
 
SET (PiToolsDir arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi)
 
# specify the cross compiler
SET (CMAKE_C_COMPILER $ENV{PI_TOOLS_HOME}/${PiToolsDir}/bin/arm-bcm2708hardfp-linux-gnueabi-gcc)
SET (CMAKE_CXX_COMPILER $ENV{PI_TOOLS_HOME}/${PiToolsDir}/bin/arm-bcm2708hardfp-linux-gnueabi-g++)
 
# where is the target environment
SET (CMAKE_FIND_ROOT_PATH $ENV{PI_TOOLS_HOME}/${PiToolsDir} ${PROJECT_SOURCE_DIR}/../lib/linux/pi)
SET (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ${PROJECT_SOURCE_DIR}/../lib/linux/pi)
 
# 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)
View CMakeLists.txt

Show listing of pre-compiled libs I'm trying to link against.

** listing directory with pre-compiled libs for Raspberry Pi / Arm target **

$ls -al lib/linux/pi/
total 24936
drwxr-xr-x  13 davis  staff      442 Sep 24 17:50 .
drwxr-xr-x   4 davis  staff      136 Sep 24 17:50 ..
-rw-r--r--   1 davis  staff   803866 Sep 24 17:50 libCppUTest.a
-rw-r--r--   1 davis  staff   288552 Sep 24 17:50 libczmq.a
-rwxr-xr-x   1 davis  staff      954 Sep 24 17:50 libczmq.la
-rwxr-xr-x   1 davis  staff   201072 Sep 24 17:50 libczmq.so
-rwxr-xr-x   1 davis  staff   201072 Sep 24 17:50 libczmq.so.1
-rwxr-xr-x   1 davis  staff   201072 Sep 24 17:50 libczmq.so.1.0.0
-rw-r--r--   1 davis  staff  4235478 Sep 24 17:50 libzmq.a
-rwxr-xr-x   1 davis  staff      942 Sep 24 17:50 libzmq.la
-rwxr-xr-x   1 davis  staff  2268130 Sep 24 17:50 libzmq.so
-rwxr-xr-x   1 davis  staff  2268130 Sep 24 17:50 libzmq.so.3
-rwxr-xr-x   1 davis  staff  2268130 Sep 24 17:50 libzmq.so.3.0.0

** listing directory with pre-compiled libs for standard Linux / x86 **

$ ls -al lib/linux/x86/

total 25960
drwxr-xr-x  18 davis  staff      612 Sep 24 17:50 .
drwxr-xr-x   4 davis  staff      136 Sep 24 17:50 ..
-rw-r--r--   1 davis  staff   746964 Sep 24 17:50 libCppUTest.a
-rw-r--r--   1 davis  staff   303330 Sep 24 17:50 libczmq.a
-rwxr-xr-x   1 davis  staff     1000 Sep 24 17:50 libczmq.la
-rwxr-xr-x   1 davis  staff   208665 Sep 24 17:50 libczmq.so
-rwxr-xr-x   1 davis  staff   208665 Sep 24 17:50 libczmq.so.1
-rwxr-xr-x   1 davis  staff   208665 Sep 24 17:50 libczmq.so.1.0.0
-rw-r--r--   1 davis  staff   314414 Sep 24 17:50 libjzmq.a
-rwxr-xr-x   1 davis  staff      996 Sep 24 17:50 libjzmq.la
-rwxr-xr-x   1 davis  staff   188577 Sep 24 17:50 libjzmq.so
-rwxr-xr-x   1 davis  staff   188577 Sep 24 17:50 libjzmq.so.0
-rwxr-xr-x   1 davis  staff   188577 Sep 24 17:50 libjzmq.so.0.0.0
-rw-r--r--   1 davis  staff  4028054 Sep 24 17:50 libzmq.a
-rwxr-xr-x   1 davis  staff      947 Sep 24 17:50 libzmq.la
-rwxr-xr-x   1 davis  staff  2220121 Sep 24 17:50 libzmq.so
-rwxr-xr-x   1 davis  staff  2220121 Sep 24 17:50 libzmq.so.3
-rwxr-xr-x   1 davis  staff  2220121 Sep 24 17:50 libzmq.so.3.0.0

Refer to CMakeLists.txt below that shows how I'm trying to use find_library() to resolve the references to these pre-built libraries inside my own project dir structure.

Also, refer to Toolchain-raspberrypi-arm.cmake which is my cross-compile toolchain file.

If I run cmake .. on Linux/x86 or Mac OS X, everything is fine. It finds and links with the correct libraries, as expected.

However, if I try to cross-compile, if fails to "find" the libraries like it does on the other platforms -- why?:

$ cmake -DCMAKE_TOOLCHAIN_FILE=../Toolchain-raspberrypi-arm.cmake ..
Using Raspberry Pi Tools found in /home/davis/git/raspberrypi/tools
CMAKE_CROSSCOMPILING => TRUE
CMAKE_SYSTEM_NAME => Linux, PROJECT_SOURCE_DIR => /home/davis/git/ebike-firmware
CMAKE_CROSSCOMPILING is true...doing find_library for ZeroMQ...
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CZMQ_LIB
    linked by target "Runtime" in directory /home/davis/git/ebike-firmware/src
ZEROMQ_LIB
    linked by target "Runtime" in directory /home/davis/git/ebike-firmware/src

-- Configuring incomplete, errors occurred!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.