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
So in case you (or anyone else) is wondering, the "default flags" used when building your addon comes from node's common.gypi file.
As you can see if you scroll through that file -fno-rtti is indeed a default. So in your own gyp file, you must negate that. This involves specifying the cflags with a ! at the end, meaning "not". In the case of -fno-rtti, it's specified in the cflags_cc section, so try adding this:
...
'cflags_cc!': [ '-fno-rtti' ]
...
Additionally, Mac builds usually have their own section to specify these flags, so you usually have to fix this twice (don't ask me why, gyp just kinda is weird in that case), so for Macs, add this (note that the "xcode_settings" name will vary depending on the flag you are enabling/disabling):
I'm hitting this same issue on windows. I'm finding it impossible to override the ExceptionHandling value (which for me like @tristanz breaks my build with linking errors). The only workaround I can find (as mentioned at brianmcd/contextify#45) is to manually modify the common.gypi that node-gyp bundles from node itself.
in my binding.gyp, trying both release and debug configurations and 'ExceptionHandling': 0 still ends up in the visual studio output file. I'm on windows 7 with node v0.10.3 and node-gyp v0.9.5 installed globally.
Adding /EHsc on Windows...hope it helps - took me a little bit of trial/error and searching around.
Inside of 'target_defaults':
'configurations':
{'Debug':
{'defines': ['DEBUG','_DEBUG'],'msvs_settings':
{'VCCLCompilerTool':
{'RuntimeLibrary': 3, # shareddebug'ExceptionHandling': 1, # /EHscdoesn't work. '/EHsc' # Enable unwind semantics for Exception Handling. This one actually does the trick
# thisisalsowhereyou can put/GRor/MDd,orother defines.}}},'Release':
{'VCCLCompilerTool':
{'RuntimeLibrary': 2, # sharedrelease'ExceptionHandling': 1, # /EHscdoesn't work. '/EHsc' # Enable unwind semantics for Exception Handling. This one actually does the trick
# thisisalsowhereyou can put/GRor/MD,orother defines.}}}
Example using node-gyp to build MySQL C++ Connector, overriding defaults. It uses C++ Exception Handler and so as you will see the warning has been suppressed because unwind semantics are now enabled:
EDIT: Closed the code block fence
EDIT 2: Adding why
WHY: Because this issue shows up on Google as #1 for me for a couple of different things I've had to search for...this puts the answers I've found here -> I realize this issue is closed sorry for confusion.
I've tried all the things listed here and in #857, but I still can't get RTTI enabled in my auto-generated MSVS 2015 project. Here is my binding.gyp below (Oh, I'm using nbind with Electron). I have all the methods I've tried listed in this file contents below, but I also tried them separately to no avail...
Sharing here in case anyone facing the same problem:
warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc (compiling source file
..\addon.cc) [..\build\addon.vcxproj]
Reacted by BaseIc Development, Inswhis and LyuJiayi654
Reacted by Simone Perelli, Cery D, Thusitha Vipula Bandara and BaseIc Development
Activity
TooTallNate commentedon Feb 20, 2012
So in case you (or anyone else) is wondering, the "default flags" used when building your addon comes from node's
common.gypifile.As you can see if you scroll through that file
-fno-rttiis indeed a default. So in your own gyp file, you must negate that. This involves specifying thecflagswith a!at the end, meaning "not". In the case of-fno-rtti, it's specified in thecflags_ccsection, so try adding this:Additionally, Mac builds usually have their own section to specify these flags, so you usually have to fix this twice (don't ask me why, gyp just kinda is weird in that case), so for Macs, add this (note that the "xcode_settings" name will vary depending on the flag you are enabling/disabling):
That should do it. For completeness sake, this is a barebones gyp file compatible with node-gyp that should have RTTI enabled:
{ 'targets': [ { 'target_name': 'bindings', 'sources': [ 'bindings.cc' ], 'cflags_cc!': [ '-fno-rtti' ], 'conditions': [ ['OS=="mac"', { 'xcode_settings': { 'GCC_ENABLE_CPP_RTTI': 'YES' } }] ] } ] }Reopen if that doesn't work for you. Cheers!
tristanz commentedon Feb 20, 2012
Adding the following seems to solve the issue on OSX:
I cannot test on linux, but there's a Chromium example that suggests it could be:
TooTallNate commentedon Feb 20, 2012
@tristanz That looks correct to me :) Glad you got it figured out.
tristanz commentedon Feb 20, 2012
Terrific. Thanks!
tristanz commentedon Jul 27, 2012
I'm still struggling to fix this on Windows. I get an error
which seems to stem from an earlier warning:
I tried adding the following but it doesn't seem to add /EHsc.
This is likely more
node-gypignorance but ideas are appreciated.tristanz commentedon Jul 27, 2012
Looks like default settings are different in the Release configuration. The fix is:
This seems to have changed multiple times over the last several versions.
edhemphill commentedon Dec 6, 2012
Does anyone know why -fno-rtti was used as a default? Any particular reason?
TooTallNate commentedon Dec 6, 2012
@edhemphill node-gyp uses the same configuration as when node itself it built, so the answer is because node itself doesn't need rtti.
edhemphill commentedon Dec 13, 2012
thanks...
springmeyer commentedon Apr 6, 2013
I'm hitting this same issue on windows. I'm finding it impossible to override the
ExceptionHandlingvalue (which for me like @tristanz breaks my build with linking errors). The only workaround I can find (as mentioned at brianmcd/contextify#45) is to manually modify thecommon.gypithat node-gyp bundles from node itself.I'm putting
in my binding.gyp, trying both release and debug configurations and
'ExceptionHandling': 0still ends up in the visual studio output file. I'm on windows 7 with node v0.10.3 and node-gyp v0.9.5 installed globally.springmeyer commentedon Apr 6, 2013
ugh... looks like a gyp bug/complexity that may require modifying how node's common.gypi is written: https://groups.google.com/forum/?fromgroups=#!topic/gyp-developer/p98GJxYJuH4
kirvedx commentedon Jun 23, 2014
Adding /EHsc on Windows...hope it helps - took me a little bit of trial/error and searching around.
Inside of 'target_defaults':
Example using node-gyp to build MySQL C++ Connector, overriding defaults. It uses C++ Exception Handler and so as you will see the warning has been suppressed because unwind semantics are now enabled:
EDIT: Closed the code block fence
EDIT 2: Adding why
WHY: Because this issue shows up on Google as #1 for me for a couple of different things I've had to search for...this puts the answers I've found here -> I realize this issue is closed sorry for confusion.
install doesnt work on osx atm - adding conditions suggested by this …
binding.gyp: Fix warnings during compiling
ben-kirk commentedon Nov 1, 2016
I've tried all the things listed here and in #857, but I still can't get RTTI enabled in my auto-generated MSVS 2015 project. Here is my binding.gyp below (Oh, I'm using nbind with Electron). I have all the methods I've tried listed in this file contents below, but I also tried them separately to no avail...
Moved the original source files to src folder. Added compiler instruc…
Remove /MP from common.gypi
KrishnaPG commentedon Mar 11, 2020
For the
/EHscissue, with VS Build Tools 2017 and node v12.9.1 the below worked in the bindings.gyp:Sharing here in case anyone facing the same problem:
binding.gyp: Fix warnings during compiling
Merge pull request nodejs#26 from clehner/master