2016-07-20 26 views
3

私はこの問題を勉強するのに数時間を費やしましたが、多くのヒットがstackoverflowにあります。私は近くにいるように感じるが、いつも何かがある。私は、Googleが提供するものを使い果たしたような気がしなかったかどうか尋ねていません。しかし、libwebsocketsはcmakeを使っているので、私にはわかりませんが、エラーは私にとっては非常に疎外です。私はcmakeのドキュメントを流し込むことができたと思うが、私が持っている時間枠内で答えを見つけることはできないだろう。libwebsocketsをarm cortex-m4でクロスコンパイルすると、cmakeエラーが発生する

私はARM-Cortex-M4プラットフォームのlibwebsocketsをクロスコンパイルしようとしています。私はlibwebsocketsのドキュメントの指示に従っています: 1)libwebsocketsソースディレクトリの上に "build"ディレクトリを作成します。私は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を作成するために、彼らのARMテンプレートを使用しました

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

3))これはこの苦情

で失敗します。ビルドディレクトリ、コールcmakeの内から 2)
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) 

私は、私が主張する場所にopensslがインストールされていることを私がdoで知りました。さらに、削除すると、

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

のように、私は図書館の苦情と同様の苦情を受けます。さらに、cmakeは同様の方法で存在するzlibを見つけたようです。私は一般的にcmakeには慣れていませんが、このsslセットアップでいくつかの他のアプリケーションを問題なくコンパイルしました。

私は、読み込みに時間がかかりすぎることなく、可能な限り冗長にしようとしました。だから私が何かを残しておけば、誰かがこれで戦ったならば、もっと詳しく説明してくれるでしょう。前もって感謝します!

+0

ドロップSET(OPENSSL_INCLUDE_DIR」../../ssl/usr/local/ssl/ 'から末尾の' openssl':私のtoolchain.cmakeファイルでトリック次の変数を設定しませんでしたinclude/openssl/")'を実行します。ソースファイルは '#include 'となり、ヘッダパス「.../ssl/usr/local/ssl/include/openssl/openssl/header.h'」になります。 'make V = 1'または' make VERBOSE = 1'を試してみてください。これは伝統的で無駄なCmakeの出力より多くの情報を提供します。 – jww

+0

Cortex-M4では、 '-mthumb -mcpu = cortex-m4'を' CFLAGS'に、 'CXXFLAGS'をインクルードすることもできます。ソフト浮動小数点ユニットがある場合は '-mfloat-abi = softfp -mfpu = fpv4-sp-d16'、ハード浮動小数点ユニットの場合は' -mfloat-abi = hard -mfpu = fpv4-sp-d16'となります。 [cmake CFLAGS CXXFLAGSの変更](http://stackoverflow.com/q/10085945)も参照してください。 – jww

+0

変数を出力するために 'message()'関数を使って '/ usr/share/cmake-3.5/Modules/FindOpenSSL.cmake'をデバッグするだけです。 – Velkan

答えて

1

私は同じ問題がありました。

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) 
関連する問題