2017-07-28 25 views
0

私は何か根本的に間違っていなければならないように感じます。私はcmakeプロジェクトに基づいてレシピを作成しました。作成したツールチェーンのyoctoを使用してプロジェクトをコンパイルすると、その後を作るcmakeのを実行しているのと同じくらい簡単ですが、それは、レシピ使用してコンパイルに失敗します。cmakeベースビットビットレシピ:sysrootがありませんか?

SUMMARY = "Opendnp3 is the de facto reference implementation of IEEE-1815 (DNP3)" 
DESCRIPTION = "Opendnp3 is a portable, scalable, and rigorously tested implementation of the DNP3 (www.dnp.org) protocol stack written in C++11. The library is designed for high-performance applications like many concurrent TCP sessions or huge device simulations. It also embeds very nicely on Linux." 
HOMEPAGE = "https://www.automatak.com/opendnp3" 
SECTION = "libs" 
DEPENDS = "asio" 
LICENSE = "Apache-2.0" 
LIC_FILES_CHKSUM = "file://NOTICE;md5=9788d3abe6c9401d72fdb3717de33e6a" 
SRCREV = "e00ff31b837821064e5208c15866a9d46f8777b1" 
SRC_URI = "git://github.com/automatak/dnp3;branch=2.0.x" 
S = "${WORKDIR}/git" 
inherit cmake 
EXTRA_OECMAKE += "" 

問題は、私はグラムで使用CXXFLAGSが++に表示されていないと思いますですツールチェインの環境によって定義されたCXXFLAGSと一致するようにします。主に--sysrootがありません。g ++は標準のC++ヘッダ(例:cstdint)を見つけることができません。

Iは、部分的に単に /toolchain.cmake -DCMAKE_TOOLCHAIN_FILE = $ {WORKDIR}を除去することによってcmake.bbclasからdo_configureをオーバーライドすることで問題を修正。 (実際には2回)だから、SYSROOTが定義されて

-march=armv7-a -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a8 --sysroot=/home/star/moxa-build/tmp/work/cortexa8hf-neon-poky-linux-gnueabi/dnp3/2.2.0-r0/recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fdebug-prefix-map=/home/star/moxa-build/tmp/work/cortexa8hf-neon-poky-linux-gnueabi/dnp3/2.2.0-r0=/usr/src/debug/dnp3/2.2.0-r0 -fdebug-prefix-map=/home/star/moxa-build/tmp/work/cortexa8hf-neon-poky-linux-gnueabi/dnp3/2.2.0-r0/recipe-sysroot-native= -fdebug-prefix-map=/home/star/moxa-build/tmp/work/cortexa8hf-neon-poky-linux-gnueabi/dnp3/2.2.0-r0/recipe-sysroot= -fvisibility-inlines-hidden -march=armv7-a -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a8 --sysroot=/home/star/moxa-build/tmp/work/cortexa8hf-neon-poky-linux-gnueabi/dnp3/2.2.0-r0/recipe-sysroot 

:ファクトCXXFLAGSの問題は次のようにtoolchain.cmakeによって定義されたよう

/home/star/moxa-build/tmp/work/cortexa8hf-neon-poky-linux-gnueabi/dnp3/2.2.0-r0/recipe-sysroot 

が、Makefileで終わるしないcmakeのによって生成されましただから私はtoolchain.cmakeの何かがプロジェクトのcmake設定を南にすると思います。

プロジェクト自体に問題があったことが分かります。インクルードされた.cmake設定ファイルの1つに、CとCXXのフラグが混在していました。私はメンテナにプルリクエストを提出します。 CXXFLAGSはSDK(CXXコマンドに直接含まれています)とbitbakeで別々に扱われています(なぜなら、なぜtoolchain.cmakeなしで動作するのかまだよく分かりません)。

ありがとうございました。

+0

レシピをビットブレイクするときにエラーを通知できますか?あなたはEXTRA_OECMAKE行なしで試しましたか? – Katu

+0

レシピのコンパイルログは[こちら](https://drive.google.com/open?id=0B_Ag-ilTJ9VVaFhyZTVLMGVIdHc)です。 _EXTRA_OECMAKE + = "" _ – Louis

+0

行を削除すると同じ結果 "致命的なエラー:cstdint:そのようなファイルまたはディレクトリはありません"というエラーをチェックします。あなたのイメージにgcc-multilibを追加する必要があると示唆している人もいます。 https://lists.yoctoproject.org/pipermail/yocto/2014-September/021760.html – Katu

答えて

0

--sysrootは、CXXFLAGSから欠けています.Yoctoが変数CXXにそれを詰め込むためです。 sysrootsディレクトリの横にyoctoにはenvironment-setup-XXXというファイルがあります。これは、すべてのsysrootのものが由来しています。

+0

ありがとうございます。_CXX_は、_arm-poky-linux-gnueabi-g ++ -march = armv7-a -mfpu =と定義されています。この場合、yoctoツールチェーン(この場合は_environment-setup-cortexa8hf-neon-poky-linux-gnueabi_)ネーム-mfloat-abi =ハード-mcpu =コルテックス-a8-sysroot =/opt/poky/2.3/sysroots/cortexa8hf-neon-poky-linux-gnueabi_そして、ホストの_cmake_と_make_を呼び出すことは、その環境でスムーズに行われます。私は、同じ環境がレシピを通じて使用されていると仮定しますが、cmakeとmakeの実装は異なる可能性があります。 – Louis

+0

@ルイス:私はあなたが参照している "cmakeの実装"を知りません。 AFAIKでは '/ opt/poky'の下に別の' make 'はありません。そしてなぜそれが必要なのでしょうか? – MSalters

+0

私はRoss Burtonの投稿を参照していました(下記参照)。私の理解は、bitbakeはホストにインストールされているようにcmakeを使用していないということです。 – Louis

関連する問題