From: Jason Roelofs Date: 2009-12-18T23:38:25+09:00 Subject: Re: [ANN] rb++ / rbgccxml 0.9.1 --001636e0a4e81ba71b047b01b19d Content-Type: text/plain; charset=ISO-8859-1 What you're running into is a general C++ compilation issue when you have code in your header files. By default, rb++ writes out code in a one-file-per-class format, along with another file that's the ruby extension starting point. Your test.hpp file ends up getting included into multiple files, and g++ doesn't like it when it sees a fully defined method multiple times. Two ways to deal with this: 1) Tell rb++ to write all code to single file: ext.writer_mode :single 2) Split your C++ code out: test.hpp namespace T { void test(); } test.cpp namespace T { void test() { ... } } Jason On Fri, Dec 18, 2009 at 9:02 AM, Thorsten Hater wrote: > Hi, > > I seem to have something like a bug in rb++. For the case that I want to > wrap a simple method > the extension doesn't compile because of multiple definitions. The issue > is somewhat tricky since > when I have a previously compiled extension and merely extend the header > file, it compiles fine. > Here test case: > > wrapper.rb > require 'rubygems' > require 'rbplusplus' > > include RbPlusPlus > > Extension.new "test" do |ext| > ext.sources ["/home/thor/rb++/test.hpp"] > > ext.module "Test" do |mod| > node = mod.namespace "T" > end > end > > test.hpp > #ifndef TEST > #define TEST > > #include > > namespace T > { > > void test() > { > std::cout << "i'm just sitting here" << std::endl; > } > > } > #endif > > The error is encountered also if I have a class before the function test. > > Thorsten > > > Jason Roelofs wrote: > > What is rb++ / rbgccxml? > > > > Rb++, rbgccxml, and rice compose a suite of tools that make wrapping > C++ > > libraries into > > Ruby extensions as simple as possible. This is built as a replacement > for > > SWIG-Ruby. > > > > What's New > > > > * Full 1.9 support through the entire stack! > > * MinGW / MSYS build support on Windows. > > > > rb++: > > * Updated to work with the Rice::Director changes > > * Fixed a bug where rb++ wasn't using any superclass on classes with > > multiple superclasses > > * Generated extension handles exceptions cleaner > > > > * Various other small bug fixes and tweaks > > > > > > rbgccxml: > > * Switched parsing from libxml-ruby to nokogiri > > * Fixed crash on encountering , but no real handling of the > type > > yet. > > * Fixed a bug with older gcc versions on dealing with anonymous > > enumerations > > > > > > Project > > > > Documentation: http://rbplusplus.rubyforge.org > > > > rb++: http://github.com/jameskilton/rbplusplus > > rbgccxml: http://github.com/jameskilton/rbgccxml > > > > > > Installation > > > > This single command will grab the whole stack needed for rb++ to work. > > > > gem install rbplusplus > > > > The stack includes four libraries: rb++, rbgccxml, gccxml_gem, and rice > > > > > > rb++ > > > > Rb++ makes it almost trivially easy to create Ruby extensions for C++ > > library. > > In the simplest of cases, there is no need to ever touch C++, > everything > > is done > > in a very simple and clean Ruby API. > > > > > > > > rbgccxml > > > > RbGCCXML allows one to easily parse out and query C / C++ code. > > This library uses GCC-XML to parse out the C / C++ code into XML, and > then > > nokogiri > > to parse and query that XML. > > > > > > > > gccxml_gem > > > > GCC-XML (www.gccxml.org) is an application that takes takes the parse > tree > > of C / C++ > > and constructs a very parsable and queryable XML file with all related > > information. > > > > This gem includes a binary build of GCC-XML for supported platforms, > > to make it trivially easy to install. Platforms currently supported > are: > > > > * Linux 32 & 64 bit > > * Mac OS X > > * Windows via MinGW / MSYS > > > > > > Rice > > > > The Ruby Interface for C++ Extensions, it provides a C++ API for > working > > with ruby. More information > > available at its project page: > > > > http://rice.rubyforge.org > > > > > > Notes > > > > Released under the MIT licence. > > > > For those familiar with py++ / pygccxml, the similarities are in > function > > only. > > Rb++ / rbgccxml were written from scratch to take advantage of the Ruby > > language to it's fullest. > > > > Bugs, patches, feature requests, et al should be posted to the > > corresponding project's Issues page on github. > > > > > > > --001636e0a4e81ba71b047b01b19d--