-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Overriding default flags #26
Comments
So in case you (or anyone else) is wondering, the "default flags" used when building your addon comes from node's As you can see if you scroll through that file ...
'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): ...
['OS=="mac"', {
'xcode_settings': {
'GCC_ENABLE_CPP_RTTI': 'YES'
}
}]
... 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! |
Adding the following seems to solve the issue on OSX: 'conditions': [
['OS=="mac"', {
'xcode_settings': { 'GCC_ENABLE_CPP_RTTI': 'YES' }
}]
] I cannot test on linux, but there's a Chromium example that suggests it could be: [ 'OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris"',
{
'cflags_cc!': ['-fno-rtti'],
'cflags_cc+': ['-frtti'],
}
] |
@tristanz That looks correct to me :) Glad you got it figured out. |
Terrific. Thanks! |
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 |
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. |
Does anyone know why -fno-rtti was used as a default? Any particular reason? |
@edhemphill node-gyp uses the same configuration as when node itself it built, so the answer is because node itself doesn't need rtti. |
thanks... |
I'm hitting this same issue on windows. I'm finding it impossible to override the I'm putting 'msvs_settings': {
'VCCLCompilerTool': {
'ExceptionHandling': 1,
}
} in my binding.gyp, trying both release and debug configurations and |
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 |
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, # shared debug
'ExceptionHandling': 1, # /EHsc doesn't work.
'/EHsc' # Enable unwind semantics for Exception Handling. This one actually does the trick
# this is also where you can put /GR or /MDd, or other defines.
}
}
},
'Release':
{
'VCCLCompilerTool':
{
'RuntimeLibrary': 2, # shared release
'ExceptionHandling': 1, # /EHsc doesn't work.
'/EHsc' # Enable unwind semantics for Exception Handling. This one actually does the trick
# this is also where you can put /GR or /MD, or other 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 |
Fixes the following warnings while compiling: ``` D:\Forritun\Microsoft Visual Studio 14.0\VC\include\xlocale(341): warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc (compiling source file ..\src\common.cc) [D:\sharp\build\sharp.vcxproj] D:\Forritun\Microsoft Visual Studio 14.0\VC\include\xlocale(341): warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc (compiling source file ..\src\operations.cc) [D:\sharp\build\sharp.vcxproj] ...etc... ``` Solution taken from here: nodejs/node-gyp#26 (comment)
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...
|
…tion to deal with exception handling (getting rid of /EHsc warning) See also nodejs/node-gyp#26
Forcing this option makes the option ```MultiProcessorCompilation``` in ```msvs_settings``` useless. It also means that one cannot use ```#import``` or they will be faced with this error when trying to build: ``` error C2813: #import is not supported with /MP (compiling source file...) ``` Please see additional discussion of this here: nodejs/node-gyp#1087 and here: nodejs/node-gyp#26
For the
Sharing here in case anyone facing the same problem:
|
Fixes the following warnings while compiling: ``` D:\Forritun\Microsoft Visual Studio 14.0\VC\include\xlocale(341): warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc (compiling source file ..\src\common.cc) [D:\sharp\build\sharp.vcxproj] D:\Forritun\Microsoft Visual Studio 14.0\VC\include\xlocale(341): warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc (compiling source file ..\src\operations.cc) [D:\sharp\build\sharp.vcxproj] ...etc... ``` Solution taken from here: nodejs/node-gyp#26 (comment)
This is likely a question born of ignorance, but is there a way to override the default flags in common.gypi?
I need to compile with RTTI enabled but node-gyp defaults to
-fno-rtti
. This is required to compile against boost, for instance.The text was updated successfully, but these errors were encountered: