[Tutorial] SketchUp Ruby C Extension
-
Is it possible to build an Ruby C Extension under Windows that doesn't require additional libraries? When using Visual C++ to build the extensions require the C++ runtime library.
-
yes. my old example did that. best is to check the DLL imports section to see what functions it requires
-
@unknownuser said:
yes. my old example did that. best is to check the DLL imports section to see what functions it requires
Ah, the Pelles C project! Is it possible to use to to just compile the C source without creating a project? (just trying to find a solution without creating too many extra project files.) -
@unknownuser said:
Is it possible to use to to just compile the C source without creating a project? (just trying to find a solution without creating too many extra project files
the .ppj file is just a collection of commands. you can easily convert it to a .bat file if you dont want to have extra files (remember to create the .def file for the .dll link)
-
Do you remember the cause of the
C:\ruby\src\ruby-1.8.6-p111\missing.h(71): error #1050: Redefinition of macro 'isinf'.
error? And can you explain what your workaround actually do?Trying to set up a project myself so I actually understand this.
-
And why is the macro redefinition just a warning for this guy, but an error in Pelles C?
https://github.com/barrie0482/rrdruby_win32_build/wiki -
hm... there is an
msvcrt-ruby18.dll
in the SketchUp folder - can I make my Visual Studio C++ project rely on this instead? So when the C Extension loads under SketchUp Ruby the runtime is there - installed by SketchUp. ?? -
@unknownuser said:
@unknownuser said:
And can you explain what your workaround actually do?
isinf is already defined in PellesC libraries so there is no need to include that file again.
But I am not including it myself - it's an error that comes from the Ruby missing.h file... :S
Building hello_world.obj. Use <stdlib.h> instead of non-standard <malloc.h> C;\ruby\src\ruby-1.8.6-p111\missing.h(71); error #1050; Redefinition of macro 'isinf'. *** Error code; 1 *** Done.
-
@unknownuser said:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx - the DLL is already loaded by Sketchup so it will use that version.
When compiling with Pelles C, right? Any way to make VC++'s nmake rely on the bundled SketchUp CRT instead of the VSC++ CRT? (splitting my quest into two projects here...)
-
@unknownuser said:
And can you explain what your workaround actually do?
isinf is already defined in PellesC libraries so there is no need to include that file again.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx - the DLL is already loaded by Sketchup so it will use that version. also you can copy the
msvcrt-ruby18.dll
in your dev directory to be picked up when debugging outside Sketchup (which I hope you do, otherwise dev time is slooooow) -
@thomthom said:
But I am not including it myself - it's an error that comes from the Ruby missing.h file... :S
that's why you need to have
#define HAVE_ISINF 1
in your code, so that Ruby will not double include@unknownuser said:
Any way to make VC++'s nmake rely on the bundled SketchUp CRT instead of the VSC++ CRT? (splitting my quest into two projects here...)
compile with the same VC or dont link any CRT and use a replacement static lib (there are some minimal libs on the net)
-
@unknownuser said:
compile with the same VC
_MSC_VER == 1200
= MVC 6, right? Can you get hold of that version any more?@unknownuser said:
or dont link any CRT and use a replacement static lib (there are some minimal libs on the net)
Here you lost me. "linking"... another concept I need to learn.
-
That is still greek to me... The only thing I compiled before these Ruby C Extensions where Visual Basic 4 applications...
-
@thomthom said:
@unknownuser said:
or dont link any CRT and use a replacement static lib (there are some minimal libs on the net)
Here you lost me. "linking"... another concept I need to learn.
As .. in statically linked, or dynamically linked.
(Hence the DLL and dylib, means Dynamically Linked Library.)
-
if you want to have fun - http://www.benshoof.org/blog/minicrt/
-
@dan rathbun said:
@thomthom said:
@unknownuser said:
or dont link any CRT and use a replacement static lib (there are some minimal libs on the net)
Here you lost me. "linking"... another concept I need to learn.
As .. in statically linked
hmm... so I could take my C Extension made with VC++'s
nmake
and statically link the RT - avoiding having to bundle it or require the users to install any additional RT? -
yes. the dll were created to solve the duplicate code problem but they created another problem - the DLL hell.
but for SU extensions having a couple of kB duplicated for the CRT is ok. also it makes the installing easier.
-
@unknownuser said:
but for SU extensions having a couple of kB duplicated for the CRT is ok. also it makes the installing easier.
And from I gathered of the Wiki article, then the DLLs are statically linked they can link just the part of the library required. ??
Now I need to figure out how to statically link the CRT. Is it as simple as a compiler flag?
-
-MT
instead of-MD
seem to be the one...
http://stackoverflow.com/questions/8463073/nmake-vc-2010-compile-without-msvcr100-dll-dependshttp://msdn.microsoft.com/en-us/library/2kzt1wy3%28v=vs.80%29.aspx
-
Advertisement