OpenWRT開発の——C++11へのサポート
前言
前回の記事では、OpenWrtでC++で簡単なプログラムを書いてテストしてみましたが、可能です.
ブロガーはこの2,3日C++11を知っていて、中の新しい特性はとても興奮しています.例えばshared_ptr,lambda,autoはいずれも非常に有用な特性である.[クリックしてC++11を知る]
今日、ブロガーは試してみました.
本文
1.gccバージョンの確認
gccは4.8バージョン以降、c++11をサポートしているという.まずクロスコンパイラのバージョンをチェックします.
支持できるようですが、私たちはやはりやってみなければなりません.
2.ファイルの編集
SDK/package/でcpp 11-demoディレクトリを作成し、次のファイル構造を作成します.
2.1 src/main.cpp
メールでcppでは、C++11の新しい特性を使いました:auto,for,lambda.
2.2 src/Makefile
最近Makefileの書き方を勉強してから、Makefileの書き方もずいぶん簡潔になりました.Makefileについては[Makefile学習ノート]にアクセスしてください
2行目のobjectsは推定mainである.oファイル.
ここで、CXXFLAGSは、コンパイル中にC++11をオンにする特性を示す-std=gun++11または-std=c++11を指定する.
2.3 Makefile
パッケージ関連のMakefileは特別な変更は必要ありません.
3.パッケージインストール実行
3.1パッケージのコンパイル
他に特別な点はなく、make V=sで、正常に通過しています.
3.2インストール
生成したipkファイルをscpでOpenWrtターゲットに転送します.
ターゲットマシンにopkgコマンドがインストールされています
C++プログラムなのでlibstdcppに依存し、libstdcppのインストールパッケージをインストールする必要があります.
libstdcppインストールパッケージは、OpenWrtをコンパイルするtrunkパスの下にあります.OpenWrtのコンパイルに成功した場合、libstdcppのインストールパッケージがあるはずです.探しにくい場合は、コマンドで探してみてください.
OpenWrtディレクトリマシンにインストールします.
libstdcppをインストールした後、cpp 11-demoをインストールすると成功します.
3.3実行結果
プログラムが正常に動作していることを示します!
まとめ
OpenWrtでC++11で開発できるのはとてもワクワクします!それはやはりできます.
しかし、これはOpenWrtがC++11をサポートしているわけではないでしょう.gccサポートと言うべきで、オペレーティングシステムとはあまり関係ありません.
もしみんなが私と一緒に新しい技術を学びたいなら、私に注目しないでください.
前回の記事では、OpenWrtでC++で簡単なプログラムを書いてテストしてみましたが、可能です.
ブロガーはこの2,3日C++11を知っていて、中の新しい特性はとても興奮しています.例えばshared_ptr,lambda,autoはいずれも非常に有用な特性である.[クリックしてC++11を知る]
今日、ブロガーは試してみました.
本文
1.gccバージョンの確認
gccは4.8バージョン以降、c++11をサポートしているという.まずクロスコンパイラのバージョンをチェックします.
$ cd SDK # OpenWrt SDK
$ cd ./staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/bin/
$ ./mips-openwrt-linux-uclibc-gcc --version
mips-openwrt-linux-uclibc-gcc (OpenWrt/Linaro GCC 4.8-2014.04 r45222) 4.8.3
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
支持できるようですが、私たちはやはりやってみなければなりません.
2.ファイルの編集
SDK/package/でcpp 11-demoディレクトリを作成し、次のファイル構造を作成します.
[SDK]$ tree package/cpp11-demo/
package/cpp11-demo/
|-- Makefile
`-- src
|-- main.cpp
`-- Makefile
1 directory, 3 files
2.1 src/main.cpp
#include <iostream>
#include <map>
using namespace std;
int main()
{
cout << "Hello, It's work!" << endl;
auto i = 1;
auto d = 0.57;
auto str = "Hello";
//-----------------------------------------------
map<string, int> m {{"a",1}, {"b",2}};
for (const auto &p : m) {
cout << p.first << "=" << p.second << endl;
}
//-----------------------------------------------
int count = 0;
auto print_num = [&count] (int num) {
cout << "num : " << num << endl;
count += num;
};
print_num(12);
print_num(32);
cout << "count=" << count << endl;
}
メールでcppでは、C++11の新しい特性を使いました:auto,for,lambda.
2.2 src/Makefile
target:=cpp11-demo
objects=$(subst .cpp,.o,$(wildcard *.cpp))
CXXFLAGS += -std=gnu++11
$(target):$(objects)
$(CXX) -o $@ $^
clean:
-@rm $(target)
-@rm $(objects)
最近Makefileの書き方を勉強してから、Makefileの書き方もずいぶん簡潔になりました.Makefileについては[Makefile学習ノート]にアクセスしてください
2行目のobjectsは推定mainである.oファイル.
ここで、CXXFLAGSは、コンパイル中にC++11をオンにする特性を示す-std=gun++11または-std=c++11を指定する.
2.3 Makefile
include $(TOPDIR)/rules.mk
PKG_NAME:=cpp11-demo
PKG_RELEASE:=1
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
include $(INCLUDE_DIR)/package.mk
define Package/cpp11-demo
SECTION:=utils
CATEGORY:=Utilites
TITLE:=$(PKG_NAME)
DEPENDS:=+libstdcpp
endef
define Build/Prepare
$(MKDIR) -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)
endef
define Package/cpp11-demo/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/$(PKG_NAME) $(1)/usr/bin
endef
$(eval $(call BuildPackage,cpp11-demo))
パッケージ関連のMakefileは特別な変更は必要ありません.
3.パッケージインストール実行
3.1パッケージのコンパイル
他に特別な点はなく、make V=sで、正常に通過しています.
3.2インストール
生成したipkファイルをscpでOpenWrtターゲットに転送します.
[SDK]$ scp bin/ar71xx/packages/base/cpp11-demo_1_ar71xx.ipk [email protected]:
[email protected]'s password:
cpp11-demo_1_ar71xx.ipk 100% 3528 3.5KB/s 00:00
ターゲットマシンにopkgコマンドがインストールされています
root@OpenWrt:~# opkg install cpp11-demo_1_ar71xx.ipk
Installing cpp11-demo (1) to root...
Collected errors:
* satisfy_dependencies_for: Cannot satisfy the following dependencies for cpp11-demo:
* libstdcpp *
* opkg_install_cmd: Cannot install package cpp11-demo.
C++プログラムなのでlibstdcppに依存し、libstdcppのインストールパッケージをインストールする必要があります.
libstdcppインストールパッケージは、OpenWrtをコンパイルするtrunkパスの下にあります.OpenWrtのコンパイルに成功した場合、libstdcppのインストールパッケージがあるはずです.探しにくい場合は、コマンドで探してみてください.
$ cd trunk
$ find -name "*.ipk" | grep libstdcpp
./bin/ar71xx/packages/base/libstdcpp_4.8-linaro-1_ar71xx.ipk
OpenWrtディレクトリマシンにインストールします.
libstdcppをインストールした後、cpp 11-demoをインストールすると成功します.
3.3実行結果
root@OpenWrt:~# cpp11-demo
Hello, It's work!
a=1
b=2
num : 12
num : 32
count=44
プログラムが正常に動作していることを示します!
まとめ
OpenWrtでC++11で開発できるのはとてもワクワクします!それはやはりできます.
しかし、これはOpenWrtがC++11をサポートしているわけではないでしょう.gccサポートと言うべきで、オペレーティングシステムとはあまり関係ありません.
もしみんなが私と一緒に新しい技術を学びたいなら、私に注目しないでください.