[Tutorial] SketchUp Ruby C Extension
-
@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
-
-
On a real world project, Vertex Tools:
I can live with that. Now it "just works" on even the freshest of systems.
-
@unknownuser said:
the DLLs are statically linked they can link just the part of the library required. ??
DLL = Dynamic Linked Library - so they cannot be statically linked (except embedding it in resource and dropping it on execute )
statically linked libraries (eg. CRT.lib) should add only the used routines to the final executable.
-
I have been working on a plugin to upload and download files to a webserver through http requests. I found this project on the forums a while ago but It wasn't working.
https://github.com/danawoodman/google-sketchup-file-downloader
Now I have it working and the C Extension compiled fine in Os X.
I have been trying to figure out how to compile it in Windows now so that the plugin can be cross-platform. I started reading this thread but its kind of confusing for me. After following the instructions in this project (which I think are a product of this thread)
https://bitbucket.org/thomthom/sketchup-ruby-c-extension/
I can compile the example code here with extconf.rb and nmake. However compiling dana's extension is a bit more complicated because it links to libcurl.
there is a line in extconf.rb to check for curllib
Make sure the cURL library is installed.
have_library("curl")
its not
checking for main() in curl.lib... no
creating MakefileSo when using nmake I get this error
fatal error C1083: Cannot open include file: 'curl/types.h': No such file or directory
I downloaded libcurl(curl-7.26.0-devel-mingw64, im on windows 7 and not sure which is the best)
So I can't figure out how to tell nmake to include the path, or where it looks for these files.
Does anyone have experience making ruby c extensions on windows and know how to include 3rd party libraries?
Any help would be appreciated.
Advertisement