On 16 January 2018 at 02:49, zhangwentao (M) <zhangwentao...@huawei.com> wrote: > Hi Christophe > I compile my APP with Android NDK (c++ 11) and linking libs from NDK packet. > I don't know what's does it mean by "pre-built" third party build.
Hi, By "pre-built", I mean you are using libs as ".a" files provided by the NDK, you are not compiling these libs yourself. > > And more: > I found that our compiler provide __sync_val_compare_and_swap . should I > use " __sync_val_compare_and_swap" to implement `__sync_fetch_and_add_4` Or > __sync_fetch_and_add ? > I don't know, I suggest you contact Linaro support (LDTS). Thanks, Christophe > > Best regard. > > -----邮件原件----- > 发件人: Christophe Lyon [mailto:christophe.l...@linaro.org] > 发送时间: 2018年1月15日 17:28 > 收件人: zhangwentao (M) > 抄送: linaro-toolchain@lists.linaro.org; Lizefan; leijitang; Huangqiang (H) > 主题: Re: About "__sync_fetch_and_add_4"//Re: [update]: Does linaro toolchain > support c++11 ?? > > On 14 January 2018 at 02:50, zhangwentao (M) <zhangwentao...@huawei.com> > wrote: >> Hi Christophe, >> >> Thanks for your reply. >> >> Actually I use ' -march=armv8-a ', and 'arm-eabi-arm' complier, >> after adding this flag, the test case compile passed. (THANKS again) >> >> But, now I am using some third party libs, and added ' -march=armv8-a ' flag >> whiling compiling and linking, But the compiler say this error: > > Are you using pre-built third party libs, or do you compile them yourself? >> >> undefined reference to `__sync_fetch_and_add_4' ----> I think the >> compiler should supply all the atomic family functions with -march=xxx flags. >> >> Does the compiler supply this functions? >> > I think it should, but if you use pre-compiled libs, maybe they were not > compiled with all the flags you need. > > Christophe > >> >> Best Regard. >> >> >> -----邮件原件----- >> 发件人: Christophe Lyon [mailto:christophe.l...@linaro.org] >> 发送时间: 2018年1月10日 18:38 >> 收件人: zhangwentao (M) >> 抄送: linaro-toolchain@lists.linaro.org; Lizefan; leijitang; Huangqiang >> (H) >> 主题: Re: [update]: Does linaro toolchain support c++11 ?? >> >> 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- >>> 2 >>> 017.05/configure' SHELL=/bin/bash >>> --with-mpc=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_ >>> a >>> rch/amd64/label/tcwg-x86_64-build/target/arm-eabi/_build/builds/destd >>> i >>> r/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/dest >>> d >>> ir/x86_64-unknown-linux-gnu >>> --with-gmp=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_ >>> a >>> rch/amd64/label/tcwg-x86_64-build/target/arm-eabi/_build/builds/destd >>> i r/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-releas >>> e >>> /builder_arch/amd64/label/tcwg-x86_64-build/target/arm-eabi/_build/sy >>> s >>> roots/arm-eabi >>> --with-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/buil >>> d >>> er_arch/amd64/label/tcwg-x86_64-build/target/arm-eabi/_build/builds/d >>> e stdir/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_ar >>> c >>> h/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