You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Description
CMake generates Visual studio projects that use /EHsc exception handling specification. In the project properties, under C++ in the Code Generation field, Cmake puts this /EHsc value.
But building a dll or exe file might result in linker errors with unresolved externals when building a Release build of your project. An option can be passed to cmake generator that will fix this problem should it occur. Maybe this is for docs? See the cmake command line snippet below and how it specifies to use /EHa. This can be then used to build the sentry library in Release config so that it links without errors to a Release mode build of some application linking the sentry lib into it.
When does the problem happen
When trying to build a project in Release config, and the project links to sentry library with crashpad backend that was built using Release or RelWithDebInfo configs.
But building a dll or exe file might result in linker errors with unresolved externals when building a Release build of your project.
Which linker errors do you observe? How do they relate to the build-config (Release, etc.)?
CMake generates Visual studio projects that use /EHsc exception handling specification. In the project properties, under C++ in the Code Generation field, Cmake puts this /EHsc value.
This is not by accident. /EHsc matches the expectation of the Native SDK (there are no C++ exceptions in our code base since all vendored dependencies in C++ follow the Google style guide (the sentry code itself is written in C), so there is no need to "catch" (as in C++ catch not SEH __except) asynchronous exceptions (we actually want them to land in our globally installed UnhandledExceptionFilter so we can report them). How does switching to /EHa solve your linker errors?
B) Use CMake to generate and specify /EHa .This generates /EHa in all the projects for sentry for VS2019.
Debug Config
MyDLL = Debug /EHa
Sentry Lib= Debug /EHa
All works fine.
Release Config
MyDLL = Release /EHa
Sentry Lib = Release /EHa
Works fine. Linker errors go away.
In other words, I think a small documentation item is needed to mention that for VS2019 you can specify /EHa when configuring sentry, if it is the case that the default flags generated by cmake for sentry cause linker errors when building a program linked to sentry.
For example:
If VS 2019 complains with linker errors when linking to sentry, try adding -DCMAKE_CXX_FLAGS="/EHa" to the CMake command line.
This is similar to This Error involving std_find that you have seen before. I searched for an example of it and found you in the comments! But in this case it is like std_find_trivial and one other function related to C++ exception handling. I think its a bug in VS2019. But for me I can just use slow SEH makes no difference to my requirements and sentry works fine.
Description
CMake generates Visual studio projects that use /EHsc exception handling specification. In the project properties, under C++ in the Code Generation field, Cmake puts this /EHsc value.
But building a dll or exe file might result in linker errors with unresolved externals when building a Release build of your project. An option can be passed to cmake generator that will fix this problem should it occur. Maybe this is for docs? See the cmake command line snippet below and how it specifies to use /EHa. This can be then used to build the sentry library in Release config so that it links without errors to a Release mode build of some application linking the sentry lib into it.
When does the problem happen
When trying to build a project in Release config, and the project links to sentry library with crashpad backend that was built using Release or RelWithDebInfo configs.
Environment
Steps To Reproduce
cmake -S"../../../Source/sentry-native" -Bbuild -G"Visual Studio 16 2019" -DSENTRY_BACKEND=crashpad -DSENTRY_BUILD_SHARED_LIBS=0 -DCMAKE_SYSTEM_VERSION=10.0 -DCMAKE_CXX_FLAGS="/EHa"
Log output
The text was updated successfully, but these errors were encountered: