Search Unity

  1. Unity 2019.1 beta is now available.
    Dismiss Notice
  2. The Unity Pro & Visual Studio Professional Bundle gives you the tools you need to develop faster & collaborate more efficiently. Learn more.
    Dismiss Notice
  3. We're looking for insight from anyone who has experience with game testing to help us better Unity. Take our survey here. If chosen to participate you'll be entered into a sweepstake to win an Amazon gift card.
    Dismiss Notice
  4. Want to provide direct feedback to the Unity team? Join the Unity Advisory Panel.
    Dismiss Notice
  5. Unity 2018.3 is now released.
    Dismiss Notice
  6. Improve your Unity skills with a certified instructor in a private, interactive classroom. Watch the overview now.
    Dismiss Notice

Linux Player: Apps based on Unity 2018.3.0f2 crashe on "std::getline()" from C/C++ native code.

Discussion in 'Linux' started by jan_bajana, Dec 20, 2018.

  1. jan_bajana


    Sep 15, 2015
    After we updated our SDK to new Unity version 2018.3.0f2 we have found crashing all applications which were always working before.
    After debuging we found crashes in native C/C++ plugins if they use:
    Code (CSharp):
    1. std::getline(input, line);
    This affects all Unity applications built with 2018.3.0f2.
    So I tried to replicate it on a simple sample, see below.

    Target platform is Linux Ubuntu x64 build:
    System information:
    • g++ (Ubuntu 5.4.1-8ubuntu1) 5.4.1 20170304
    • clang version 4.0.0 (tags/RELEASE_400/rc1)
      Target: x86_64-pc-linux-gnu
      Thread model: posix
    How to replicate? Build a simple native plugin:
    1. Create sample file "vi test.cpp"
    Code (CSharp):
    1. #include <memory.h>
    2. #include <string>
    3. #include <stdio.h>
    4. #include <sstream>
    5. #include <iostream>
    7. extern "C" void L7_GetDeviceModel(char* buffer) {
    8.     std::istringstream input;
    9.     input.str("1\n2\n3\n4\n5\n6\n7\n");
    10.     std::string line;
    11.     std::getline(input, line);
    12.     strcpy(buffer, line.c_str());
    13. }
    2. How we built:
    1. sudo g++ -std=c++11 -g -fPIC -o -shared test.cpp
    2. sudo clang++-4.0 -g -fPIC -o -shared test.cpp
    3. sudo g++ -g -fPIC -o -shared test.cpp
    4. sudo g++ -std=gnu++11 -g -fPIC -o -shared test.cpp
    3. How we call in C#:
    Code (CSharp):
    1.             [DllImport("libunitywrapper", CallingConvention = CallingConvention.Cdecl)]
    2.             internal static extern void L7_GetDeviceMake(
    3.                 [MarshalAs(UnmanagedType.LPStr)] StringBuilder buffer);
    You can see full stacktrace in the uploaded log:
    Important part there:
    Code (CSharp):
    1. #8  0x00007f6ff0bbe579 in __cxa_throw () from /usr/lib/x86_64-linux-gnu/
    2. #9  0x00007f6ff0be7fe2 in std::__throw_bad_cast() () from /usr/lib/x86_64-linux-gnu/
    3. #10 0x00007f6ff0be16a1 in std::basic_istream<char, std::char_traits<char> >& std::getline<char, std::char_traits<char>, std::allocator<char> >(std::basic_istream<char, std::char_traits<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) () from /usr/lib/x86_64-linux-gnu/
    4. #11 0x00007f6fc8c81f01 in L7_GetDeviceModel (buffer=0x3fb7580 "") at test.cpp:12
    Code (CSharp):
    1. terminate called after throwing an instance of 'std::bad_cast'
    2.   what():  std::bad_cast
    This bug affects the compatibility of all applications we want to build on Unity 2018.3.0f2.
    Any ideas why it happens? Is that compiler version or C++ language standard?

    Thank you.
    Last edited: Dec 21, 2018
  2. jan_bajana


    Sep 15, 2015
    Uploaded log with native stacktrace:

    Attached Files:

  3. jan_bajana


    Sep 15, 2015
    I am adding here source files who want to easy replicate issue:
    C# and CPP plugin file.

    Attached Files:

  4. marcdi_unity


    Unity Technologies

    May 29, 2018

    It should now be fixed in version 2018.3.4.

    Linux: Fixed using libstdc++ in native plugins crashing (2018.3 no longer links with libstdc++ statically). (1115024)​