使用 c++11 标志交叉编译 OpenWRT

Crosscompile for OpenWRT with c++11 flag

本文关键字:OpenWRT 交叉编译 标志 c++11 使用      更新时间:2023-10-16

我是OpenWRT的新手,我需要交叉编译c ++程序。问题是,我仍然收到此错误:

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

现在我知道了,这是个问题,编译过程中没有使用 c++11 标志。我试图将TARGET_CXXFLAGS添加到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
....

谢谢你的建议,雅各布。

取决于 GCC 版本和 STD 库版本。我可以确认上游的最新版本运行良好。这是我的测试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