• Login
sketchucation logo sketchucation
  • Login
⚠️ Libfredo 15.4b | Minor release with bugfixes and improvements Update

[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.
  • D Offline
    Dan Rathbun
    last edited by 6 Mar 2012, 13:33

    and you are compiling from the commandline, not from within the Visual Studio GUI interface, correct ?

    I'm not here much anymore.

    1 Reply Last reply Reply Quote 0
    • T Offline
      thomthom
      last edited by 6 Mar 2012, 14:00

      Currently using nmake that comes with MS VS C++.

      And I'm using a extconf.rb with mkfm to generate the makefile.

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

      1 Reply Last reply Reply Quote 0
      • T Offline
        thomthom
        last edited by 18 Jun 2012, 10:04

        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.

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

        1 Reply Last reply Reply Quote 0
        • T Offline
          tbd
          last edited by 18 Jun 2012, 12:10

          yes. my old example did that. best is to check the DLL imports section to see what functions it requires

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

          1 Reply Last reply Reply Quote 0
          • T Offline
            thomthom
            last edited by 18 Jun 2012, 12:12

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

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

            1 Reply Last reply Reply Quote 0
            • T Offline
              tbd
              last edited by 18 Jun 2012, 13:09

              @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
              • T Offline
                thomthom
                last edited by 18 Jun 2012, 13:22

                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
                • T Offline
                  thomthom
                  last edited by 18 Jun 2012, 13:25

                  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
                  • T Offline
                    thomthom
                    last edited by 18 Jun 2012, 13:43

                    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
                    • T Offline
                      thomthom
                      last edited by 18 Jun 2012, 14:06

                      @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
                      • T Offline
                        thomthom
                        last edited by 18 Jun 2012, 14:09

                        @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
                        • T Offline
                          tbd
                          last edited by 18 Jun 2012, 14:10

                          @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
                          • T Offline
                            tbd
                            last edited by 18 Jun 2012, 14:41

                            @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
                            • T Offline
                              thomthom
                              last edited by 18 Jun 2012, 19:28

                              @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
                              • T Offline
                                thomthom
                                last edited by 18 Jun 2012, 20:50

                                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
                                • D Offline
                                  Dan Rathbun
                                  last edited by 18 Jun 2012, 22:06

                                  @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
                                  • T Offline
                                    tbd
                                    last edited by 19 Jun 2012, 08:20

                                    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
                                    • T Offline
                                      thomthom
                                      last edited by 19 Jun 2012, 09:35

                                      @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
                                      • T Offline
                                        tbd
                                        last edited by 19 Jun 2012, 10:22

                                        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
                                        • T Offline
                                          thomthom
                                          last edited by 19 Jun 2012, 10:46

                                          @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
                                          • 1
                                          • 2
                                          • 3
                                          • 4
                                          • 5
                                          • 6
                                          • 7
                                          • 8
                                          • 9
                                          • 6 / 9
                                          • First post
                                            Last post
                                          Buy SketchPlus
                                          Buy SUbD
                                          Buy WrapR
                                          Buy eBook
                                          Buy Modelur
                                          Buy Vertex Tools
                                          Buy SketchCuisine
                                          Buy FormFonts

                                          Advertisement