On 10 January 2018 at 03:40, zhangwentao (M) <zhangwentao...@huawei.com> wrote: > Hi, all > > I have updated my test case: > > Compile passed but failed while linking. > > wentao@ubuntu:~/test/lamda$ cat a.cc > #include <iostream> > using namespace std; > > int main() > { > auto f = [=]() { > cout <<"Hello world"<<endl; > }; > f(); > return 0; > } > > > wentao@ubuntu:~/test/lamda$ arm-eabi-g++ --std=gnu++11 a.cc -o arm32 > /home/wentao/TeeOS/tools/gcc-linaro-6.3.1-2017.05-x86_64_arm-eabi/bin/../lib/gcc/arm-eabi/6.3.1/../../../../arm-eabi/lib/libstdc++.a(locale.o): > In function `get_locale_cache_mutex': > /home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-eabi/snapshots/gcc.git~linaro-6.3-2017.05/libstdc++-v3/src/c++98/locale.cc:36: > undefined reference to `__sync_synchronize' > /home/wentao/TeeOS/tools/gcc-linaro-6.3.1-2017.05-x86_64_arm-eabi/bin/../lib/gcc/arm-eabi/6.3.1/../../../../arm-eabi/lib/libstdc++.a(future.o): > In function `__future_category_instance': > /home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-eabi/snapshots/gcc.git~linaro-6.3-2017.05/libstdc++-v3/src/c++11/future.cc:64: > undefined reference to `__sync_synchronize' > /home/wentao/TeeOS/tools/gcc-linaro-6.3.1-2017.05-x86_64_arm-eabi/bin/../lib/gcc/arm-eabi/6.3.1/../../../../arm-eabi/lib/libstdc++.a(locale_init.o): > In function `(anonymous namespace)::get_locale_mutex()': > /home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-eabi/snapshots/gcc.git~linaro-6.3-2017.05/libstdc++-v3/src/c++98/locale_init.cc:66: > undefined reference to `__sync_synchronize' > collect2: error: ld returned 1 exit status > wentao@ubuntu:~/test/lamda$ >
Hi, This error happens because the arm-eabi compiler defaults to an old version of the architecture (v4 or v5t). Adding -mcpu=cortex-a9 for instance should avoid the problem because the compiler will be able to generate synchronization primitives inline. Christophe > 发件人: zhangwentao (M) > 发送时间: 2018年1月10日 10:22 > 收件人: 'linaro-toolchain@lists.linaro.org' > 抄送: Huangqiang (H); Lizefan; leijitang > 主题: Does linaro toolchain support c++11 ?? > > Hi all, > > I wonder if my compiler supports C++11? If not, where could I found the > compiler supports c++11 (both 32bit and 64bit arm). > > THANKS a lot~~~ > > My compiler information is as below: > > wentao@ubuntu:~/test/lamda$ arm-eabi-g++ -v > Using built-in specs. > COLLECT_GCC=arm-eabi-g++ > COLLECT_LTO_WRAPPER=/home/wentao/TeeOS/tools/gcc-linaro-6.3.1-2017.05-x86_64_arm-eabi/bin/../libexec/gcc/arm-eabi/6.3.1/lto-wrapper > Target: arm-eabi > Configured with: > '/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-eabi/snapshots/gcc.git~linaro-6.3-2017.05/configure' > SHELL=/bin/bash > --with-mpc=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-eabi/_build/builds/destdir/x86_64-unknown-linux-gnu > > --with-mpfr=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-eabi/_build/builds/destdir/x86_64-unknown-linux-gnu > > --with-gmp=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-eabi/_build/builds/destdir/x86_64-unknown-linux-gnu > --with-gnu-as --with-gnu-ld --disable-libmudflap --enable-lto > --enable-shared --without-included-gettext --enable-nls > --disable-sjlj-exceptions --enable-gnu-unique-object --enable-linker-build-id > --disable-libstdcxx-pch --enable-c99 --enable-clocale=gnu > --enable-libstdcxx-debug --enable-long-long --with-cloog=no --with-ppl=no > --with-isl=no --enable-multilib --with-multilib-list=aprofile > --enable-threads=no --disable-multiarch --with-newlib > --with-build-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-eabi/_build/sysroots/arm-eabi > > --with-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-eabi/_build/builds/destdir/x86_64-unknown-linux-gnu/arm-eabi/libc > --enable-checking=release --disable-bootstrap --enable-languages=c,c++,lto > --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu > --target=arm-eabi > --prefix=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-eabi/_build/builds/destdir/x86_64-unknown-linux-gnu > Thread model: single > gcc version 6.3.1 20170404 (Linaro GCC 6.3-2017.05) > wentao@ubuntu:~/test/lamda$ > > ===> > And more, I wrote a “hello-world” program using c++11, it could work with > host g++, but when I change to “arm-eabi-g++”, it does not work. > Information as below: > > wentao@ubuntu:~/test/lamda$ cat a.cc > #include <iostream> > using namespace std; > > typedef void(*Func)(); > int main() > { > Func f = [=]() { > cout <<"Hello world"<<endl; > }; > f(); > return 0; > } > wentao@ubuntu:~/test/lamda$ g++ a.cc -o host > a.cc: In function ‘int main()’: > a.cc:10:2: warning: lambda expressions only available with -std=c++11 or > -std=gnu++11 [enabled by default] > }; > ^ > wentao@ubuntu:~/test/lamda$ ./host > Hello world > wentao@ubuntu:~/test/lamda$ arm-eabi-g++ a.cc -o arm32 > a.cc: In function ‘int main()’: > a.cc:10:2: error: cannot convert ‘main()::<lambda()>’ to ‘Func {aka void > (*)()}’ in initialization > }; > ^ > wentao@ubuntu:~/test/lamda$ arm-eabi-g++ --std=gnu++11 a.cc -o arm32 # > if gives –std=c++11 , the error is the same. > a.cc: In function ‘int main()’: > a.cc:10:2: error: cannot convert ‘main()::<lambda()>’ to ‘Func {aka void > (*)()}’ in initialization > }; > ^ > wentao@ubuntu:~/test/lamda$ > > _______________________________________________ > linaro-toolchain mailing list > linaro-toolchain@lists.linaro.org > https://lists.linaro.org/mailman/listinfo/linaro-toolchain > _______________________________________________ linaro-toolchain mailing list linaro-toolchain@lists.linaro.org https://lists.linaro.org/mailman/listinfo/linaro-toolchain