2016-07-20 16 views
3

Lassen Sie mich diese Frage vorwegnehmen: Ich habe heute Stunden damit verbracht, dieses Problem zu erforschen, mit vielen Treffern auf stackoverflow. Ich fühle mich, als wäre ich nah dran, aber da ist immer etwas im Weg. Ich würde nicht fragen, ob ich nicht das Gefühl habe, dass ich erschöpft habe, was Google zu bieten hat. Ich kenne mein Ziel genau und habe viele Open-Source-Pakete erfolgreich kompiliert, da libwebsockets CMake verwendet, mit dem ich nicht vertraut bin, die Fehler sind mir ziemlich fremd; Ich nehme an, ich könnte CMake-Dokumentationen durchreichen, aber ich bezweifle, dass ich die Antwort innerhalb des Zeitrahmens finden würde, den ich habe.cmake Fehler beim Cross-Compilieren von libwebsockets für Arm cortex-m4

Ich versuche CrossWebsockets für eine ARM-Cortex-M4-Plattform zu kompilieren. Ich habe die Anweisungen aus der libwebsockets-Dokumentation befolgt: 1) Erstellen Sie ein "Build" -Verzeichnis über dem libwebsockets-Quellverzeichnis. 2) Aus dem Build-Verzeichnis, rufen Cmake:

cmake .. -DCMAKE_TOOLCHAIN_FILE=../cross.cmake 

3) ich ihre ARM-Vorlage verwendet haben cross.cmake

# 
# CMake Toolchain file for crosscompiling on ARM. 
# 
# This can be used when running cmake in the following way: 
# cd build/ 
# cmake .. -DCMAKE_TOOLCHAIN_FILE=../cross-arm-linux-gnueabihf.cmake 
# 


# Name of C compiler. 
SET(CMAKE_C_COMPILER "arm-uclinuxeabi-gcc") 
SET(CMAKE_CXX_COMPILER "arm-uclinuxeabi-g++") 


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

# where is the target environment 
SET(CMAKE_FIND_ROOT_PATH ../../../../A2F ../../../../tools ../../../xv-nic) 
SET(ZLIB_INCLUDE_DIR "../lzo-2.09/") 
SET(ZLIB_LIBRARY "../../lib/libz.a") 
SET(OPENSSL_ROOT_DIR "../../ssl") 
SET(OPENSSL_LIBRARIES "../../ssl/usr/local/ssl/lib/") 
SET(OPENSSL_INCLUDE_DIR "../../ssl/usr/local/ssl/include/openssl/") 

# 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) 

4) Dies schlägt mit dieser Beschwerde

zu erstellen
Compiling with SSL support 
CMake Error at /usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:148 (message): 
    Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the 
    system variable OPENSSL_ROOT_DIR (missing: **OPENSSL_LIBRARIES**) 
Call Stack (most recent call first): 
    /usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE) 
    /usr/share/cmake-3.5/Modules/FindOpenSSL.cmake:370 (find_package_handle_standard_args) 
    CMakeLists.txt:816 (find_package) 

Nun, was ist neugierig/frustrierend ist, dass ich tun openssl installiert haben, wo ich Anspruch auf; weiter, wenn ich

SET(ZLIB_INCLUDE_DIR "../lzo-2.09/") 

entferne, erhalte ich eine Beschwerde, die der Beschwerde der Bibliotheken ähnlich ist. Außerdem scheint cmake das ähnlich vorhandene Zlib zu finden. Ich habe mehrere andere Anwendungen mit diesem SSL-Setup ohne Probleme kompiliert, obwohl ich mit CMake im Allgemeinen nicht vertraut bin.

Ich habe versucht, so ausführlich wie möglich zu sein, ohne einen Beitrag zu lange zu machen, um zu lesen, also wenn ich etwas ausgelassen habe, würde ich glücklich sein, mehr Details zur Verfügung zu stellen, wenn sich jemand darum gekämpft hat. Danke im Voraus!

+0

Tropfen die Hinter 'openssl' von' SET (OPENSSL_INCLUDE_DIR“../../ssl/usr/local/ssl/ include/openssl/")'. Quelldateien werden '#include ', und kombiniert ergibt sich ein Headerpfad von '.../ssl/usr/local/ssl/include/openssl/openssl/header.h'. Sie können auch versuchen, 'make V = 1' oder' make VERBOSE = 1' zu verwenden. Es gibt Ihnen mehr Informationen als die traditionelle und fast nutzlose Cmake-Ausgabe. – jww

+0

Sie können auch '-mthumb -mcpu = cortex-m4' in' CFLAGS' und 'CXXFLAGS' für den Cortex-M4 verwenden. Und möglicherweise '-mfloat-abi = softfp -mfpu = fpv4-sp-d16' wenn es eine weiche Gleitkommaeinheit gibt und '-mfloat-abi = hart -mfpu = fpv4-sp-d16' für eine harte Gleitkommaeinheit. Siehe auch [cmake CFLAGS CXXFLAGS-Änderung] (http://stackoverflow.com/q/10085945). – jww

+0

Debuggen Sie einfach '/ usr/share/cmake-3.5/Module/FindOpenSSL.cmake', indem Sie die' message() 'Funktion verwenden, um Variablen auszugeben. – Velkan

Antwort

1

Ich hatte das gleiche Problem. Setzen Sie die folgenden Variablen in meinem toolchain.cmake Datei hat der Trick:

SET(ZLIB_INCLUDE_DIR ../../../build/buildroot-build/staging/usr/include) 
SET(ZLIB_LIBRARY ../../../build/buildroot-build/target/usr/lib/libz.so) 

SET(OPENSSL_ROOT_DIR ../../../build/buildroot-build/target/usr) 
SET(OPENSSL_LIBRARIES ../../../build/buildroot-build/target/usr/lib) 
SET(OPENSSL_INCLUDE_DIR ../../../build/buildroot-build/staging/usr/include/openssl) 
SET(OPENSSL_CRYPTO_LIBRARY ../../../build/buildroot-build/target/usr/lib/libcrypto.so) 
SET(OPENSSL_SSL_LIBRARY ../../../build/buildroot-build/target/usr/lib/libssl.so)