2015-10-31 42 views
2

是否有可能使用帶ESP8266的地圖用於Arduino包?用於Arduino IDE的ESP8266(xtensa-lx106-elf-gcc)和std :: map鏈接錯誤

這裏是我的代碼:

#include <map> 

typedef std::map<int, int> Items; 

void setup() { 
    Items items; 
    items[2]=5; 
    //items.emplace(4,5); 
} 

void loop() { 

} 

以下是編譯/連接erorrs:

Arduino: 1.6.5 (Windows 8.1), Board: "Generic ESP8266 Module, Serial, 80 MHz, 40MHz, DIO, 115200, 512K (64K SPIFFS)" 

sketch_oct31a.cpp.o: In function `loop': 
C:\Program Files (x86)\Arduino/sketch_oct31a.ino:11: undefined reference to  `std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*,  std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)' 
sketch_oct31a.cpp.o: In function `_M_emplace_hint_unique<const  std::piecewise_construct_t&, std::tuple<int&&>, std::tuple<> >': 
c:\users\user\appdata\roaming\arduino15\packages\esp8266\tools\xtensa-lx106- elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106- elf\include\c++\4.8.2\bits/stl_tree.h:1673: undefined reference to  `std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*,  std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)' 
sketch_oct31a.cpp.o: In function `std::_Rb_tree<int, std::pair<int const,  int>, std::_Select1st<std::pair<int const, int> >, std::less<int>,  std::allocator<std::pair<int const, int> >  >::_M_erase(std::_Rb_tree_node<std::pair<int const, int> >*)': 
c:\users\user\appdata\roaming\arduino15\packages\esp8266\tools\xtensa-lx106- elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106- elf\include\c++\4.8.2\bits/stl_tree.h:1130: undefined reference to  `std::_Rb_tree_decrement(std::_Rb_tree_node_base*)' 
sketch_oct31a.cpp.o: In function `std::_Rb_tree_iterator<std::pair<int  const, int> >::operator--()': 
c:\users\user\appdata\roaming\arduino15\packages\esp8266\tools\xtensa-lx106- elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106- elf\include\c++\4.8.2\bits/stl_tree.h:204: undefined reference to  `std::_Rb_tree_decrement(std::_Rb_tree_node_base*)' 
sketch_oct31a.cpp.o: (.text._ZNSt8_Rb_treeIiSt4pairIKiiESt10_Select1stIS2_ESt4lessIiESaIS2_EE29_M_get _insert_hint_unique_posESt23_Rb_tree_const_iteratorIS2_ERS1_[_ZNSt8_Rb_treeIiSt4 pairIKiiESt10_Select1stIS2_ESt4lessIiESaIS2_EE29_M_get_insert_hint_unique_posESt 23_Rb_tree_const_iteratorIS2_ERS1_]+0x0): undefined reference to `std::_Rb_tree_increment(std::_Rb_tree_node_base*)' 
sketch_oct31a.cpp.o: In function `std::_Rb_tree<int, std::pair<int const,  int>, std::_Select1st<std::pair<int const, int> >, std::less<int>,  std::allocator<std::pair<int const, int> >  >::_M_get_insert_hint_unique_pos(std::_Rb_tree_const_iterator<std::pair<int  const, int> >, int const&)': 
c:\users\user\appdata\roaming\arduino15\packages\esp8266\tools\xtensa-lx106- elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits/stl_tree.h:1431: undefined reference to `std::_Rb_tree_decrement(std::_Rb_tree_node_base*)' 
c:\users\user\appdata\roaming\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits/stl_tree.h:1448: undefined reference to `std::_Rb_tree_increment(std::_Rb_tree_node_base*)' 
collect2.exe: error: ld returned 1 exit status 
Error compiling. 

我把那包從這裏:https://github.com/esp8266/Arduino

BTW任何其他的東西了ESP8266編譯OK 。

預先感謝

+0

「loop」完全空了嗎? – bluefog

+0

是的,它只是一個簡短的演示 –

回答

3

標準ESP8266設置沒有鏈接到libstdC++,它提供map等std名字空間碼。

你需要在ESP8266 Arudino文件夾的根編輯platforms.txt(此文件夾的位置取決於用於安裝什麼,你使用的是什麼操作系統) - 並添加-lstdc++下面一行:

compiler.c.elf.libs=-lm -lgcc -lhal -lphy -lnet80211 -llwip -lwpa -lmain -lpp -lsmartconfig -lwps -lcrypto -laxtls 

Arduino的IDE只在開始讀取該文件一次,所以,要確保在編譯之前重新啓動IDE。

+0

Minon在$ ARDUINO_IDE/hardware/ –

+0

下沒有名爲'esp8266com'的這樣的目錄你是對的,只有當我使用git版本併爲它開發時才存在。由於每次安裝都會因安裝方法和操作系統的不同而有所不同,因此我已經刪除了路徑,並且任何讀者都必須確定安裝軟件包的位置。 –