On Tue, Mar 16, 2021 at 10:37 PM Flavio Castro Alves Filho <
flavio.al...@gmail.com> wrote:

> Hello Xiang,
>
> I could execute my example inside the NuttX infrastructure.
>
> I had to change my file names, from cpp to cxx. Is it mandatory to
> change the file extension to use C++?
>
>
No, .cxx is just the default extension. You can change the default value in
Makefile like this:
CXXEXT=.cpp
But this feature just exists in Makefile under the apps folder.


> Reviewing my cmake file, it seems that it is not using uClibc++ to
> build, but newlib ... probably that's the reason for the linking
> error. I need to figure out how to address this. If you have any
> suggestions, please let me know.
>
> Best regards,
>
> Flavio
>
>
> Em seg., 15 de mar. de 2021 às 08:24, Flavio Castro Alves Filho
> <flavio.al...@gmail.com> escreveu:
> >
> > Hello Xiang,
> >
> > Thank you for your fast response.
> >
> > I was trying to build out of the NuttX structure, using NuttX as a
> library.
> >
> > I tested and checked what you showed and it worked.
> >
> > I exported the configuration (running make export and uncompressing
> > the zip file into my environment) and tried to build again and I it is
> > still not compiling.
> >
> > Finally, I added the '#include <nuttx/config.h> and it is still not
> working.
> >
> > I wil test now inside the NuttX structure.
> >
> > Thank you very much.
> >
> > Best regards,
> >
> > Flavio
> >
> > Em seg., 15 de mar. de 2021 às 07:14, Xiang Xiao
> > <xiaoxiang781...@gmail.com> escreveu:
> > >
> > > On Mon, Mar 15, 2021 at 6:00 PM Flavio Castro Alves Filho <
> > > flavio.al...@gmail.com> wrote:
> > >
> > > > Hello,
> > > >
> > > > I am trying to use STL in a simple C++ Hello project and I am getting
> > > > compilation error.s
> > > >
> > > > Is STL supported in NuttX? Can I use it?
> > > >
> > > >
> > > Yes, you can. Please reference the following config and Make.defs to
> setup
> > > your C++ environment:
> > > nuttx/boards/arm/stm32/stm32f4discovery/configs/cxxtest/defconfig
> > > nuttx/boards/sim/sim/sim/configs/cxxtest/defconfig
> > > nuttx/nuttx/boards/sim/sim/sim/configs/libcxxtest/defconfig
> > >
> > >
> > > > Here is my sample code:
> > > >
> > > > === Hello.cpp ===
> > > > #include <stdio.h>
> > > > #include "HelloWorld.h"
> > > >
> > > > CHelloWorld::CHelloWorld() {
> > > >     mSecret = 42;
> > > >     printf("Constructor: mSecret=%d\n",mSecret);
> > > > }
> > > >
> > > > CHelloWorld::~CHelloWorld() {
> > > >
> > > > }
> > > >
> > > > bool CHelloWorld::HelloWorld(void) {
> > > >     printf("HelloWorld: mSecret=%d\n",mSecret);
> > > >
> > > >     if (mSecret == 42) {
> > > >         printf("CHelloWorld: HelloWorld: Hello, world!");
> > > >         return true;
> > > >     }
> > > >     else {
> > > >         printf("CHelloWorld: HelloWorld: CONSTRUCTION FAILED!\n");
> > > >         return false;
> > > >     }
> > > > }
> > > > =========
> > > >
> > > > === Hello.h ===
> > > > class CHelloWorld
> > > > {
> > > >     public:
> > > >         CHelloWorld();
> > > >         ~CHelloWorld();
> > > >         bool HelloWorld(void);
> > > >     private:
> > > >         int mSecret;
> > > > };
> > > > =========
> > > >
> > > > === Log.cpp ===
> > > > #include "Log.h"
> > > > #include <stdio.h>
> > > > #include <string>
> > > >
> > > > void Log::print(std::string_view message) {
> > > >
> > > >     FILE *fp = fopen("/dev/ttyS0", "w");
> > > >     if (fp == NULL) {
> > > >         printf("Error opening serial port!\n");
> > > >         return;
> > > >     }
> > > >
> > > >     std::string msgStr { message };
> > > >
> > > >     /* Try to force input data on stdin */
> > > >     fwrite(msgStr.c_str(), sizeof(char), message.length(), fp);
> > > >
> > > >     fclose(fp);
> > > > }
> > > > =========
> > > >
> > > > === Log.h ===
> > > > #include <string_view>
> > > >
> > > > class Log {
> > > > public:
> > > >     static void print(std::string_view message);
> > > > };
> > > > =========
> > > >
> > > > And there the compilation error:
> > > > =========
> > > > -- Build files have been written to:
> /home/ubuntu/nuttx-apps/hellocpp/build
> > > > [4/4] Linking CXX executable src/hellocpp
> > > > FAILED: src/hellocpp
> > > > : && arm-none-eabi-ld --entry=__start -nostartfiles -nostdlib
> > > > -nodefaultlibs
> > > >
> -T/home/ubuntu/nuttx-apps/hellocpp/nuttx-export-9.1.0/scripts/ld.script
> > > > -o hellocpp.elf src/CMakeFiles/hellocpp.dir/HelloWorld.cpp.o
> > > > src/CMakeFiles/hellocpp.dir/Log.cpp.o
> > > > src/CMakeFiles/hellocpp.dir/main.cpp.o
> > > > -L/home/ubuntu/nuttx-apps/hellocpp/src/hellocpp
> > > > -L/home/ubuntu/nuttx-apps/hellocpp/nuttx-export-9.1.0/libs
> > > > --start-group  -lc  -larch  -lbinfmt  -lboard  -lboards  -ldrivers
> > > > -lfs  -lmm  -lsched  -lxx  -lnet  -lsupc++
> > > > /usr/lib/gcc/arm-none-eabi/9.2.1/thumb/v7e-m/nofp/libgcc.a
> > > > --end-group && cd /home/ubuntu/nuttx-apps/hellocpp/build/src &&
> > > > arm-none-eabi-objcopy -S -O binary
> > > > /home/ubuntu/nuttx-apps/hellocpp/build/hellocpp.elf
> > > > /home/ubuntu/nuttx-apps/hellocpp/build/hellocpp.bin
> > > > arm-none-eabi-ld: src/CMakeFiles/hellocpp.dir/Log.cpp.o: in function
> > > > `void std::__cxx11::basic_string<char, std::char_traits<char>,
> > > > std::allocator<char> >::_M_construct<char const*>(char const*, char
> > > > const*, std::forward_iterator_tag)':
> > > > /usr/include/newlib/c++/9.2.1/bits/basic_string.tcc:212: undefined
> > > > reference to `std::__throw_logic_error(char const*)'
> > > > arm-none-eabi-ld:
> > > > /usr/include/newlib/c++/9.2.1/bits/basic_string.tcc:219: undefined
> > > > reference to `std::__cxx11::basic_string<char,
> std::char_traits<char>,
> > > > std::allocator<char> >::_M_create(unsigned int&, unsigned int)'
> > > > arm-none-eabi-ld:
> > > > /usr/include/newlib/c++/9.2.1/bits/basic_string.tcc:225: undefined
> > > > reference to `std::__cxx11::basic_string<char,
> std::char_traits<char>,
> > > > std::allocator<char> >::_S_copy_chars(char*, char const*, char
> > > > const*)'
> > > > arm-none-eabi-ld: src/CMakeFiles/hellocpp.dir/Log.cpp.o: in function
> > > > `std::__cxx11::basic_string<char, std::char_traits<char>,
> > > > std::allocator<char> >::~basic_string()':
> > > > /usr/include/newlib/c++/9.2.1/bits/basic_string.h:658: undefined
> > > > reference to `std::__cxx11::basic_string<char,
> std::char_traits<char>,
> > > > std::allocator<char> >::_M_dispose()'
> > > > arm-none-eabi-ld:
> > > > /usr/include/newlib/c++/9.2.1/bits/basic_string.h:658: undefined
> > > > reference to `std::__cxx11::basic_string<char,
> std::char_traits<char>,
> > > > std::allocator<char> >::_M_dispose()'
> > > > ninja: build stopped: subcommand failed.
> > > > make[1]: *** [Makefile:13: _build] Error 1
> > > > make[1]: Leaving directory '/home/ubuntu/nuttx-apps/hellocpp'
> > > > make: *** [Makefile:25: default] Error 2
> > > > =========
> > > >
> > > > My CMakelists:
> > > >
> > > > === CMakeLists.txt ===
> > > > cmake_minimum_required(VERSION 3.2...3.15)
> > > >
> > > > project(hellocpp
> > > >     VERSION 1.0
> > > >     DESCRIPTION "Hello world C++ Nuttx"
> > > > )
> > > >
> > > > set(CMAKE_CXX_STANDARD 17)
> > > > set(CMAKE_CXX_STANDARD_REQUIRED ON)
> > > > set(CMAKE_C_STANDARD 99)
> > > >
> > > > set(NUTTX_PATH "${CMAKE_SOURCE_DIR}/nuttx-export-9.1.0")
> > > >
> > > > include(cmake/phigw.cmake)
> > > >
> > > > set(AC_COMMON_FLAGS "${AC_COMMON_FLAGS} -fno-builtin -Wall -Wshadow
> > > > -Wundef -g")
> > > >
> > > > set(AC_DEFINES "${AC_DEFINES} -DCONFIG_WCHAR_BUILTIN")
> > > >
> > > > include_directories(
> > > >     src
> > > >     ${NUTTX_PATH}/include
> > > >     ${NUTTX_PATH}/arch/chip
> > > > )
> > > >
> > > > set(EXE_NAME hellocpp)
> > > >
> > > > set(CMAKE_CXX_FLAGS "${AC_HW_FLAGS} ${AC_DEFINES} ${AC_COMMON_FLAGS}
> > > > ${AC_CXX_EXTRA_FLAGS}")
> > > > if (PARAM_DEBUG)
> > > >     set(CMAKE_CXX_FLAGS     "${CMAKE_CXX_FLAGS} -Os -g")
> > > > else()
> > > >     set(CMAKE_CXX_FLAGS     "${CMAKE_CXX_FLAGS} -Os")
> > > > endif()
> > > >
> > > > set(CMAKE_SKIP_RPATH ON)
> > > > set(CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_LINKER} ${AC_LINKER_FLAGS} -o
> > > > ${EXE_NAME}.elf <OBJECTS> <LINK_LIBRARIES>")
> > > >
> > > > set(BUILD_SHARED_LIBS OFF)
> > > >
> > > > add_subdirectory(src)
> > > > =========
> > > >
> > > > === src/CMakelists.txt ===
> > > > set(HEADER_FILES
> > > >     HelloWorld.h
> > > >     Log.h
> > > > )
> > > >
> > > > set(SOURCE_FILES
> > > >     HelloWorld.cpp
> > > >     Log.cpp
> > > > )
> > > >
> > > > link_directories(${EXE_NAME} ${NUTTX_PATH}/libs)
> > > >
> > > > add_executable(${EXE_NAME} ${SOURCE_FILES} main.cpp ${HEADER_FILES})
> > > >
> > > > add_custom_command(
> > > >     TARGET ${EXE_NAME}
> > > >     POST_BUILD
> > > >     COMMAND ${CMAKE_OBJCOPY} ARGS -S -O binary
> > > > ${CMAKE_BINARY_DIR}/${EXE_NAME}.elf
> > > > ${CMAKE_BINARY_DIR}/${EXE_NAME}.bin
> > > > )
> > > >
> > > > target_link_libraries(${EXE_NAME} --start-group)
> > > > target_link_libraries(${EXE_NAME} c)
> > > > target_link_libraries(${EXE_NAME} arch)
> > > > target_link_libraries(${EXE_NAME} binfmt)
> > > > target_link_libraries(${EXE_NAME} board)
> > > > target_link_libraries(${EXE_NAME} boards)
> > > > target_link_libraries(${EXE_NAME} drivers)
> > > > target_link_libraries(${EXE_NAME} fs)
> > > > target_link_libraries(${EXE_NAME} mm)
> > > > target_link_libraries(${EXE_NAME} sched)
> > > > target_link_libraries(${EXE_NAME} xx)
> > > > target_link_libraries(${EXE_NAME} net)
> > > > target_link_libraries(${EXE_NAME} supc++)
> > > > target_link_libraries(${EXE_NAME}
> > > > /usr/lib/gcc/arm-none-eabi/9.2.1/thumb/v7e-m/nofp/libgcc.a)
> > > > target_link_libraries(${EXE_NAME} --end-group)
> > > > =========
> > > >
> > > > I am using Ubuntu 20.04 operating system and the toolchain provided
> > > > from the Ubuntu Repository.
> > > >
> > > > Best regards,
> > > >
> > > > Flavio
> > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Flavio de Castro Alves Filho
> > > >
> > > > flavio.al...@gmail.com
> > > > Twitter: http://twitter.com/#!/fraviofii
> > > > LinkedIn profile: www.linkedin.com/in/flaviocastroalves
> > > >
> >
> >
> >
> > --
> > Flavio de Castro Alves Filho
> >
> > flavio.al...@gmail.com
> > Twitter: http://twitter.com/#!/fraviofii
> > LinkedIn profile: www.linkedin.com/in/flaviocastroalves
>
>
>
> --
> Flavio de Castro Alves Filho
>
> flavio.al...@gmail.com
> Twitter: http://twitter.com/#!/fraviofii
> LinkedIn profile: www.linkedin.com/in/flaviocastroalves
>

Reply via email to