sketchucation logo sketchucation
    • Login
    ℹ️ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info

    [Tutorial] SketchUp Ruby C Extension

    Scheduled Pinned Locked Moved Developers' Forum
    176 Posts 16 Posters 25.9k Views 16 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • tbdT Offline
      tbd
      last edited by

      @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)

      SketchUp Ruby Consultant | Podium 1.x developer
      http://plugins.ro

      1 Reply Last reply Reply Quote 0
      • thomthomT Offline
        thomthom
        last edited by

        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.

        Thomas Thomassen — SketchUp Monkey & Coding addict
        List of my plugins and link to the CookieWare fund

        1 Reply Last reply Reply Quote 0
        • thomthomT Offline
          thomthom
          last edited by

          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

          Thomas Thomassen — SketchUp Monkey & Coding addict
          List of my plugins and link to the CookieWare fund

          1 Reply Last reply Reply Quote 0
          • thomthomT Offline
            thomthom
            last edited by

            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. ??

            Thomas Thomassen — SketchUp Monkey & Coding addict
            List of my plugins and link to the CookieWare fund

            1 Reply Last reply Reply Quote 0
            • thomthomT Offline
              thomthom
              last edited by

              @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.
              
              

              Thomas Thomassen — SketchUp Monkey & Coding addict
              List of my plugins and link to the CookieWare fund

              1 Reply Last reply Reply Quote 0
              • thomthomT Offline
                thomthom
                last edited by

                @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...)

                Thomas Thomassen — SketchUp Monkey & Coding addict
                List of my plugins and link to the CookieWare fund

                1 Reply Last reply Reply Quote 0
                • tbdT Offline
                  tbd
                  last edited by

                  @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)

                  SketchUp Ruby Consultant | Podium 1.x developer
                  http://plugins.ro

                  1 Reply Last reply Reply Quote 0
                  • tbdT Offline
                    tbd
                    last edited by

                    @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)

                    SketchUp Ruby Consultant | Podium 1.x developer
                    http://plugins.ro

                    1 Reply Last reply Reply Quote 0
                    • thomthomT Offline
                      thomthom
                      last edited by

                      @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.

                      Thomas Thomassen — SketchUp Monkey & Coding addict
                      List of my plugins and link to the CookieWare fund

                      1 Reply Last reply Reply Quote 0
                      • thomthomT Offline
                        thomthom
                        last edited by

                        That is still greek to me... The only thing I compiled before these Ruby C Extensions where Visual Basic 4 applications... 😒

                        Thomas Thomassen — SketchUp Monkey & Coding addict
                        List of my plugins and link to the CookieWare fund

                        1 Reply Last reply Reply Quote 0
                        • Dan RathbunD Offline
                          Dan Rathbun
                          last edited by

                          @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.)

                          💭

                          I'm not here much anymore.

                          1 Reply Last reply Reply Quote 0
                          • tbdT Offline
                            tbd
                            last edited by

                            if you want to have fun - http://www.benshoof.org/blog/minicrt/

                            SketchUp Ruby Consultant | Podium 1.x developer
                            http://plugins.ro

                            1 Reply Last reply Reply Quote 0
                            • thomthomT Offline
                              thomthom
                              last edited by

                              @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?

                              Thomas Thomassen — SketchUp Monkey & Coding addict
                              List of my plugins and link to the CookieWare fund

                              1 Reply Last reply Reply Quote 0
                              • tbdT Offline
                                tbd
                                last edited by

                                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.

                                SketchUp Ruby Consultant | Podium 1.x developer
                                http://plugins.ro

                                1 Reply Last reply Reply Quote 0
                                • thomthomT Offline
                                  thomthom
                                  last edited by

                                  @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?

                                  Thomas Thomassen — SketchUp Monkey & Coding addict
                                  List of my plugins and link to the CookieWare fund

                                  1 Reply Last reply Reply Quote 0
                                  • thomthomT Offline
                                    thomthom
                                    last edited by

                                    -MT instead of -MD seem to be the one...
                                    http://stackoverflow.com/questions/8463073/nmake-vc-2010-compile-without-msvcr100-dll-depends

                                    http://msdn.microsoft.com/en-us/library/2kzt1wy3%28v=vs.80%29.aspx

                                    Thomas Thomassen — SketchUp Monkey & Coding addict
                                    List of my plugins and link to the CookieWare fund

                                    1 Reply Last reply Reply Quote 0
                                    • thomthomT Offline
                                      thomthom
                                      last edited by

                                      Changed compiler flag from -MD to -MT

                                      Thomas Thomassen — SketchUp Monkey & Coding addict
                                      List of my plugins and link to the CookieWare fund

                                      1 Reply Last reply Reply Quote 0
                                      • thomthomT Offline
                                        thomthom
                                        last edited by

                                        On a real world project, Vertex Tools:

                                        VertexToolsMT.png

                                        I can live with that. 😄 Now it "just works" on even the freshest of systems.

                                        Thomas Thomassen — SketchUp Monkey & Coding addict
                                        List of my plugins and link to the CookieWare fund

                                        1 Reply Last reply Reply Quote 0
                                        • tbdT Offline
                                          tbd
                                          last edited by

                                          @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.

                                          SketchUp Ruby Consultant | Podium 1.x developer
                                          http://plugins.ro

                                          1 Reply Last reply Reply Quote 0
                                          • D Offline
                                            designingcrime
                                            last edited by

                                            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.

                                            Link Preview Image
                                            GitHub - danawoodman/google-sketchup-file-downloader: [NOT MAINTAINED] A generic and reusable SketchUp Ruby C extension file downloading utility to be used within SketchUp plugins.

                                            [NOT MAINTAINED] A generic and reusable SketchUp Ruby C extension file downloading utility to be used within SketchUp plugins. - danawoodman/google-sketchup-file-downloader

                                            favicon

                                            GitHub (github.com)

                                            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)

                                            404 — Bitbucket

                                            favicon

                                            (bitbucket.org)

                                            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 Makefile

                                            So 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.

                                            1 Reply Last reply Reply Quote 0
                                            • 1
                                            • 2
                                            • 5
                                            • 6
                                            • 7
                                            • 8
                                            • 9
                                            • 9 / 9
                                            • First post
                                              Last post
                                            Buy SketchPlus
                                            Buy SUbD
                                            Buy WrapR
                                            Buy eBook
                                            Buy Modelur
                                            Buy Vertex Tools
                                            Buy SketchCuisine
                                            Buy FormFonts

                                            Advertisement