I think the /GR- option works only in the Microsoft compiler, and we needed cross-platform (Linux, Mac, Win) so i had to make it work on GCC and Intel Compiler.
We're producing a shared library which includes CryptoPP for data protection as well as the secret algorithms to work on the data. Enabling RTTI would cause the compiler to include type information for all the classes in our shared library, thereby greatly facilitating the process of reverse engineering our secret algorithms. Hex-Rays (C decompiler) has a presentation about that:
Since we are not trying to hide the fact that we are using Crypto++, there is no problem with having strings inside the binary. We just wanted to make reverse engineering of the stuff that is included besides Crypto++ as hard as possible.
If you want to get really creative with hiding the fact that you are using Crypto++, you can use DUMPBIN (win) or NM (mac/linux) to collect a list of all class and function names and then put a prefix header inside cryptlib.h to #define those class names to random identifiers. That way, even the linked library will not export any symbol with a usable name :) but in your source code, you can just include your header file and use the normal Crypto++ names.
For strings, you could also use dumpbin/nm to collect all of them and then replace them with string constants. We've used something like this before:
In the source code: "Hello World %s" is replaced with csHelloWorld_s (= "cs" + string in CamelCase )
We then used sed to create a #define map where every string is just numbered, e.g.:
#ifdef _DEBUG
#define csHelloWorld_s "Hello World %s"
#else
#define csHelloWorld_s "0001: %s"
#endif
That way, all your release errors and exceptions will consist only of numbers, which are meaningless to any hacker, but you can easily look up which number corresponds to which string constant and find the locations where they are being used. Since you seem to work with Windows, I can also wholeheartedly recommend symserver and procdump. That way you can get good stack traces (and view them with source in Visual Studio) even if your users only have stripped and debug-less release binaries.
However, for our current project i think just keeping the .SO and .DLL safe from HexRays and IDA Pro will be enough. As I said, the secret part are the algorithms and not the fact that we use Crypto++ for authentication.
Regards,
Hajo Nils Krabbenhöft