> On Jan 30, 2016, at 6:04 AM, Geert Janssens <geert.gnuc...@kobaltwit.be> 
> wrote:
> 
> Hi,
> 
> I'm adding c++ code to the csv-importer. Various classes have been defined so 
> far, 
> though they aren't really in use yet. They are compiled and linked into the 
> csv-import 
> shared lib.
> 
> When running gnucash in this setup, I get this warning:
> 
> WARN <gnc.module> Failed to dlopen() 
> '/home/janssege/Lokaal/installs/gnucash/master/lib/gnucash/libgncmo
> 
> And the csv import functionality is skipped.
> 
> I understand this has to do with dlopen not understanding c++ name mangling, 
> but don't 
> know how to avoid it.
> 
> The classes I have introduced so far don't need to be exposed to the rest of 
> gnucash. They 
> are intended for internal use in the csv importer only.
> 
> How can I shield them from dlopen, or otherwise put, mark them as not 
> exportable ?

I'm a bit puzzled about how exactly the C++ bits are integrated with the rest 
of the importer, but I think your problem is that you're including C-linkage 
headers into C++ without declaring them as such. For example in 
gnc-csv-imp-trans.hpp, you have

#include "config.h"
#include "Account.h"
#include "Transaction.h"
#include <vector>
#include <memory>

it needs to be

extern "C"
{
#include "config.h"
#include "Account.h"
#include "Transaction.h"
}
#include <vector>
#include <memory>

to tell the compiler to use unmangled names for the symbols from those headers. 
That lack of mangling is called C linkage. You need to do that in both headers 
and implementations. If a header will be included in a C file, wrap the 'extern 
"C" {' and closing } with #ifdef __cplusplus … #endif so that the C compiler 
doesn't see it.

Any C++ functions called from C need to also have C linkage, and obviously must 
be free functions, not class members. Only the declarations need be wrapped in 
extern "C" {…}. The definitions shouldn't be and can be as C++-y as you want. 
You can look at qof/gnc-numeric to see an example.

Regards,
John Ralls


_______________________________________________
gnucash-devel mailing list
gnucash-devel@gnucash.org
https://lists.gnucash.org/mailman/listinfo/gnucash-devel

Reply via email to