Кросскомпиляция для OpenWRT с флагом c++11

Я новичок в OpenWRT, и мне нужно кросскомпилировать программу на С++. Проблема в том, что я все еще получаю эту ошибку:

error: 'to_string' is not a member of 'std'
  "duplicate raw value " + std::to_string(it->first));
                           ^

Теперь я знаю, проблема в том, что во время компиляции не используется флаг c++11. Я пытался добавить TARGET_CXXFLAGS в Makefile, но мне это не помогло.

Вот Makefile:

include $(TOPDIR)/rules.mk

PKG_NAME:=gateway
PKG_VERSION:=1.0
PKG_RELEASE:=2
INIT_SCRIPT_NAME:=$(PKG_NAME)

PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_PROTO:=git
PKG_BUILD_DEPENDS:=+libmosquittopp +poco +zmq +cppzmq +openzwave +cppunit +bluez-libs
PKG_SOURCE_URL:=....
PKG_SOURCE_VERSION:=...

CMAKE_INSTALL:=1

include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/cmake.mk

CMAKE_OPTIONS += \
    -DCMAKE_INSTALL_PREFIX=/ \
    -DCMAKE_BUILD_TYPE:STRING=Release

TARGET_CXXFLAGS += -DPOCO_NO_FPENVIRONMENT 
TARGET_CXXFLAGS += -g -std=c++11 -Wall -pedantic

....

Спасибо за совет, Якуб.


person Jakub J.    schedule 21.03.2018    source источник
comment
Какую стандартную библиотеку (включая версию) вы используете? Если он достаточно старый, в нем может не быть to_string. В этом случае изменение Makefile не поможет.   -  person Marshall Clow    schedule 21.03.2018
comment
Вы имеете в виду версию g++? Я использую g++ версии 5.4.0.   -  person Jakub J.    schedule 21.03.2018


Ответы (1)


Зависит от версии GCC и версии STD lib. Я могу подтвердить, что последняя версия из апстрима работает отлично. Вот мой тест Makefile, который может вам помочь и дать некоторые подсказки.

CXX=/media/build/openwrt/staging_dir/toolchain-arm_cortex-a7+neon-vfpv4_gcc-5.5.0_musl_eabi/bin/arm-openwrt-linux-g++

RM=rm -f
LDLIBS=
CPPFLAGS=-Wall -std=c++11
LDFLAGS=-L/media/build/openwrt/staging_dir/target-arm_cortex-a7+neon-vfpv4_musl_eabi/usr/lib
INC=-I. -I/media/build/openwrt/staging_dir/target-arm_cortex-a7+neon-vfpv4_musl_eabi/usr/include


SOURCES=main.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE = hello

all: $(OBJECTS) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
    $(CXX) -o $@ $^ $(LDFLAGS) $(LDLIBS)

.cpp.o:
    $(CXX) $(INC) $(CPPFLAGS) -c $<

clean:
    $(RM) $(OBJECTS)

distclean: clean
    $(RM) $(EXECUTABLE)

.PHONY: all clean distclean
person Anton Glukhov    schedule 22.03.2018