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

    [Tutorial] SketchUp Ruby C Extension

    已排程 已置頂 已鎖定 已移動 Developers' Forum
    176 貼文 16 Posters 25.9k 瀏覽 16 Watching
    正在載入更多貼文
    • 從舊到新
    • 從新到舊
    • 最多點贊
    回覆
    • 在新貼文中回覆
    登入後回覆
    此主題已被刪除。只有擁有主題管理權限的使用者可以查看。
    • J 離線
      jefftrull
      最後由 編輯

      I'm on to the next challenge now... building for the 1.8.7-p334 version my colleagues prefer (better compatibility with certain gems). Unfortunately this one was built with with mingw, and my VS2010 build flow that worked for 1.8.6-p287 (mswin) is not successful here. I have the following results:

      1. build against 1.8.7-p334 built from source with VS2010: compile succeeds, load fails with missing dll msvcrt-ruby18-vc100 (or something like that). If I supply the dll, Sketchup crashes.
      2. build against 1.8.7-p334 one-click install (mingw): compile fails. Lots of warnings about win32.h and missing ruby API functions
      3. hybrid build pointing includes to mswin build of 1.8.7-p334, library from mingw one-click: link error

      I'm under the impression that because dll's use the C API it should be possible to load a VS2010-generated extension into a mingw-built Ruby. Is it a hopeless cause?

      Thanks,
      Jeff

      1 條回覆 最後回覆 回覆 引用 0
      • J 離線
        jefftrull
        最後由 編輯

        Today I made a startling discovery: the plugin I built under VS2010 against the 1.8.6-p287 mswin Ruby will load and run without changes in the 1.8.7-p334 mingw build. So the Ruby version and compiler both mismatch, and yet everything works. I'm dumbfounded but delighted, and my previous question is now moot.

        1 條回覆 最後回覆 回覆 引用 0
        • thomthomT 離線
          thomthom
          最後由 編輯

          👍 😄

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

          1 條回覆 最後回覆 回覆 引用 0
          • thomthomT 離線
            thomthom
            最後由 編輯

            @thomthom said:

            Btw, does anyone know how one can make extconf.rb and make/nmake output their files to a given folder? I'd like to make it so that each platform outputs its generated files to separate directories.

            Anyone know how to achieve this?

            Making it so that when I build and compile under Windows everything is placed in a "win32" folder and "osx" when using OSX?
            Or rather, to clarify, I know how to do conditionals - just don't know how to control where the generated files are output.

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

            1 條回覆 最後回覆 回覆 引用 0
            • Dan RathbunD 離線
              Dan Rathbun
              最後由 編輯

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

              I'm not here much anymore.

              1 條回覆 最後回覆 回覆 引用 0
              • thomthomT 離線
                thomthom
                最後由 編輯

                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 條回覆 最後回覆 回覆 引用 0
                • thomthomT 離線
                  thomthom
                  最後由 編輯

                  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 條回覆 最後回覆 回覆 引用 0
                  • tbdT 離線
                    tbd
                    最後由 編輯

                    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 條回覆 最後回覆 回覆 引用 0
                    • thomthomT 離線
                      thomthom
                      最後由 編輯

                      @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 條回覆 最後回覆 回覆 引用 0
                      • tbdT 離線
                        tbd
                        最後由 編輯

                        @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 條回覆 最後回覆 回覆 引用 0
                        • thomthomT 離線
                          thomthom
                          最後由 編輯

                          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 條回覆 最後回覆 回覆 引用 0
                          • thomthomT 離線
                            thomthom
                            最後由 編輯

                            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 條回覆 最後回覆 回覆 引用 0
                            • thomthomT 離線
                              thomthom
                              最後由 編輯

                              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 條回覆 最後回覆 回覆 引用 0
                              • thomthomT 離線
                                thomthom
                                最後由 編輯

                                @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 條回覆 最後回覆 回覆 引用 0
                                • thomthomT 離線
                                  thomthom
                                  最後由 編輯

                                  @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 條回覆 最後回覆 回覆 引用 0
                                  • tbdT 離線
                                    tbd
                                    最後由 編輯

                                    @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 條回覆 最後回覆 回覆 引用 0
                                    • tbdT 離線
                                      tbd
                                      最後由 編輯

                                      @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 條回覆 最後回覆 回覆 引用 0
                                      • thomthomT 離線
                                        thomthom
                                        最後由 編輯

                                        @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 條回覆 最後回覆 回覆 引用 0
                                        • thomthomT 離線
                                          thomthom
                                          最後由 編輯

                                          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 條回覆 最後回覆 回覆 引用 0
                                          • Dan RathbunD 離線
                                            Dan Rathbun
                                            最後由 編輯

                                            @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 條回覆 最後回覆 回覆 引用 0
                                            • 1
                                            • 2
                                            • 3
                                            • 4
                                            • 5
                                            • 6
                                            • 7
                                            • 8
                                            • 9
                                            • 4 / 9
                                            • 第一個貼文
                                              最後的貼文
                                            Buy SketchPlus
                                            Buy SUbD
                                            Buy WrapR
                                            Buy eBook
                                            Buy Modelur
                                            Buy Vertex Tools
                                            Buy SketchCuisine
                                            Buy FormFonts

                                            Advertisement