eurecom-s3 / symcc

SymCC: efficient compiler-based symbolic execution
http://www.s3.eurecom.fr/tools/symbolic_execution/symcc.html
GNU General Public License v3.0
771 stars 137 forks source link

Error in compiling C++ programs using libcxx #104

Open william4code opened 2 years ago

william4code commented 2 years ago

I am using symcc to analyze C++ programs with libcxx. I follow the document c++.txt in docs. Firstly, I compile and instrument libcxx using sym++ and install the instrumented libcxx to path: /home/user/programs/libcxx_install Then I use sym++ to compile my target c++ program main.cpp. But I get the following error. It seems that some headers files are missed.

By the way, I can compile and install libcxx without symcc. The uninstrumented libcxx works well on my computer. I can also use standard cxx library by setting SYMCC_REGULAR_LIBCXX=yes.

The errors are as follows.

=================================== In file included from main.cpp:1: In file included from /home/user/programs/libcxx_install/include/c++/v1/iostream:37: In file included from /home/user/programs/libcxx_install/include/c++/v1/ios:214: /home/user/programs/libcxx_install/include/c++/v1/iosfwd:189:14: error: use of undeclared identifier 'mbstate_t' typedef fpos streampos; ^ /home/user/programs/libcxx_install/include/c++/v1/iosfwd:190:14: error: use of undeclared identifier 'mbstate_t' typedef fpos wstreampos; ^ /home/user/programs/libcxx_install/include/c++/v1/iosfwd:195:14: error: use of undeclared identifier 'mbstate_t' typedef fpos u16streampos; ^ /home/user/programs/libcxx_install/include/c++/v1/iosfwd:196:14: error: use of undeclared identifier 'mbstate_t' typedef fpos u32streampos; ^ In file included from main.cpp:1: In file included from /home/user/programs/libcxx_install/include/c++/v1/iostream:37: In file included from /home/user/programs/libcxx_install/include/c++/v1/ios:215: In file included from /home/user/programs/libcxx_install/include/c++/v1/locale:14: In file included from /home/user/programs/libcxx_install/include/c++/v1/string:506: In file included from /home/user/programs/libcxx_install/include/c++/v1/string_view:175: In file included from /home/user/programs/libcxx_install/include/c++/v1/string:57: In file included from /home/user/programs/libcxx_install/include/c++/v1/algorithm:639: In file included from /home/user/programs/libcxx_install/include/c++/v1/initializer_list:46: /home/user/programs/libcxx_install/include/c++/v1/cstddef:49:9: error: no member named 'ptrdiff_t' in the global namespace using ::ptrdiff_t; ~~^ /home/user/programs/libcxx_install/include/c++/v1/cstddef:50:9: error: no member named 'size_t' in the global namespace using ::size_t; ~~^ /home/user/programs/libcxx_install/include/c++/v1/cstddef:53:9: error: no member named 'max_align_t' in the global namespace using ::max_align_t; ~~^ In file included from main.cpp:1: In file included from /home/user/programs/libcxx_install/include/c++/v1/iostream:37: In file included from /home/user/programs/libcxx_install/include/c++/v1/ios:215: In file included from /home/user/programs/libcxx_install/include/c++/v1/locale:14: In file included from /home/user/programs/libcxx_install/include/c++/v1/string:506: In file included from /home/user/programs/libcxx_install/include/c++/v1/string_view:175: In file included from /home/user/programs/libcxx_install/include/c++/v1/string:57: In file included from /home/user/programs/libcxx_install/include/c++/v1/algorithm:639: /home/user/programs/libcxx_install/include/c++/v1/initializer_list:61:5: error: unknown type name 'size_t' size_t size_; ^ /home/user/programs/libcxx_install/include/c++/v1/initializer_list:65:38: error: unknown type name 'size_t' initializer_list(const _Ep* b, size_t __s) _NOEXCEPT ^ /home/user/programs/libcxx_install/include/c++/v1/initializer_list:73:13: error: unknown type name 'size_t' typedef size_t size_type; ^ /home/user/programs/libcxx_install/include/c++/v1/initializer_list:84:5: error: unknown type name 'size_t' size_t size() const _NOEXCEPT {return size_;} ^ In file included from main.cpp:1: In file included from /home/user/programs/libcxx_install/include/c++/v1/iostream:37: In file included from /home/user/programs/libcxx_install/include/c++/v1/ios:215: In file included from /home/user/programs/libcxx_install/include/c++/v1/locale:14: In file included from /home/user/programs/libcxx_install/include/c++/v1/string:506: In file included from /home/user/programs/libcxx_install/include/c++/v1/string_view:175: In file included from /home/user/programs/libcxx_install/include/c++/v1/__string:57: In file included from /home/user/programs/libcxx_install/include/c++/v1/algorithm:640: /home/user/programs/libcxx_install/include/c++/v1/type_traits:1553:32: error: use of undeclared identifier 'size_t'; did you mean 'sizeof'? : public integral_constant<size_t, 0> {}; ^ /home/user/programs/libcxx_install/include/c++/v1/type_traits:1553:38: error: expected expression : public integral_constant<size_t, 0> {}; ^ /home/user/programs/libcxx_install/include/c++/v1/type_traits:1555:32: error: use of undeclared identifier 'size_t'; did you mean 'sizeof'? : public integral_constant<size_t, rank<_Tp>::value + 1> {}; ^ /home/user/programs/libcxx_install/include/c++/v1/type_traits:1555:38: error: expected expression : public integral_constant<size_t, rank<_Tp>::value + 1> {}; ^ /home/user/programs/libcxx_install/include/c++/v1/type_traits:1555:51: error: expected class name : public integral_constant<size_t, rank<_Tp>::value + 1> {}; ^ /home/user/programs/libcxx_install/include/c++/v1/type_traits:1556:22: error: unknown type name 'size_t' template <class _Tp, size_t _Np> struct _LIBCPP_TEMPLATE_VIS rank<_Tp[_Np]> ^ /home/user/programs/libcxx_install/include/c++/v1/type_traits:1557:32: error: use of undeclared identifier 'size_t'; did you mean 'sizeof'? : public integral_constant<size_t, rank<_Tp>::value + 1> {}; ^ /home/user/programs/libcxx_install/include/c++/v1/type_traits:1557:38: error: expected expression : public integral_constant<size_t, rank<_Tp>::value + 1> {}; ^ fatal error: too many errors emitted, stopping now [-ferror-limit=] 20 errors generated.

Anyone can help me?

aur3l14no commented 11 months ago

Try adding nostdinc++ in sym++ script.

stdlib_cflags="-isystem ${!libcxx_var}/include/c++/v1 -nostdinc++ -nostdlib++"

Ref: https://releases.llvm.org/16.0.0/projects/libcxx/docs/UsingLibcxx.html#using-a-custom-built-libc