Thread: [pygccxml-development] Compilation problem
Brought to you by:
mbaas,
roman_yakovenko
From: Vincent F. <vin...@gm...> - 2008-06-04 09:00:47
|
After a LOT of Roman's advices, I'm able to generate the .cpp file corresponding to a big part of the library I'm currently wrapping. I tried to follow the examples given in the website and choosed to use scons as my building tool. Like in pyEasyBmp example, I defined my properties file (environnement.py) and a scons file. Unfortunately, all that's build is a .os, I don't really understand why... Using file command, I get the following line : ferespost.os: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped Which normally correspond to a .o file if I don't mess up. environnement.py mainly contains the following definitions: boost_path = '/usr/lib' boost_libs_path = '/usr/lib' gccxml_path = '/usr/bin/gccxml' pygccxml_path = '/usr/lib/python2.4/site-packages/pygccxml' pyplusplus_path = '/usr/lib/python2.4/site-packages/pyplusplus' ferespost_path = '/people/ferries/ferespost/SRC' python_libs_path = '/usr/lib/python2.4' python_include_path = '/usr/include/python2.4' working_dir = '/people/ferries/ferespost' generated_files_dir = '/people/ferries/ferespost/generated' unittests_dir = '/people/ferries/ferespost/unittests' The sconstruct file is joined to the present e-mail. Thanks again for all your help. PS : I'm ever trying to convince my client to publish the wrapper as an open source library. |
From: Vincent F. <vin...@gm...> - 2008-09-17 10:35:02
|
I've got some problems while generating a library from my wrappers. The compilations work fine, but I got some fatal errors when I use some functions. These errors or due to a bad generation of the library from the wrappers. (I've tried some very easy examples which worked perfectly fine with the same inheritance scheme and a corresponding wrapper generator using py++). The constructeur of the class is never called, calling the constructor of the super class instead (it should call both). Is there any option in the compilation with gcc and boost.python I could have forgotten? Thanks in advance, Vincent FERRIES |
From: Vincent F. <vin...@gm...> - 2008-09-18 12:41:52
|
Bad evaluation. I have a class NastranDatabase which inherits from GenericDatabase. When I call the constructor of the NastranDatabase, the only one constructor called is the GenericDatabase one... not both. I tried to make a very simple example with this two classes and it works perfectly fine. Here is the file database.cpp : #include "database.h" #include <iomanip> #include <iostream> using namespace std ; using namespace postLib; using namespace generic; database::database(void) { cout << "Constructeur de la Generic Database." << endl; } Here is the file nastranDatabase.cpp : #include "nastranDatabase.h" #include <iomanip> #include <iostream> using namespace std ; using namespace postLib; using namespace nastran; database::database(void) : generic::database() { cout << "Constructeur de la Nastran Database." << endl; } My code generator : import os import pyplusplus import common_utils from environment import settings from pyplusplus import code_creators from pyplusplus import module_builder from pyplusplus import messages from pygccxml import declarations from pyplusplus.module_builder import call_policies from pyplusplus import function_transformers as FT license = \ """ /* * My program license */ """ def export(): global license header_files = [os.path.join(settings.ferespost_path, "pyferespost.h")] # Create configuration for GCC-XML parser # Initialize module builder mb = module_builder.module_builder_t(header_files, gccxml_path=settings.gccxml_path, working_directory=settings.ferespost_path, include_paths=[settings.ferespost_path], define_symbols=[]) #Well, don't you want to see what is going on? # Please be quiet... I'll be grateful # mb.print_declarations() mb.classes().exclude() genericDatabase = mb.namespace('postLib').namespace('generic').class_('database') genericDatabase.include() nastranDatabase = mb.namespace('postLib').namespace('nastran').class_('database') nastranDatabase.include() genericDatabase.rename('Generic' + genericDatabase.name.capitalize()) nastranDatabase.rename('Nastran' + nastranDatabase.name.capitalize()) #Creating code creator. After this step you should not modify/customize declarations. mb.build_code_creator(settings.module_name) mb.code_creator.license = license mb.code_creator.user_defined_directories.append(settings.ferespost_path) mb.code_creator.precompiled_header = 'boost/python.hpp' #Writing code to multiple files, much easier to add missing call_policies. mb.split_module(settings.generated_files_dir) # Main generation fonction if __name__ == '__main__': export() print 'done' The test program and its output : import pyferespost print "Generic Database : " pyferespost.GenericDatabase() print "Nastran Database : " pyferespost.NastranDatabase() Generic Database : Constructeur de la Generic Database. Nastran Database : Constructeur de la Generic Database. Constructeur de la Nastran Database. So for now, all seems to be ok. If I do the same things in my whole application, when I instanciate a NastranDatabase, the only constructor called is the GenericDatabase one. Here is the corresponding generated code for the constructor definition : GenericDatabase : #include "boost/python.hpp" #include "pyferespost.h" #include "GenericDatabase.pypp.hpp" namespace bp = boost::python; struct dataBase_wrapper : postLib::generic::dataBase, bp::wrapper< postLib::generic::dataBase > { dataBase_wrapper( ) : postLib::generic::dataBase( ) , bp::wrapper< postLib::generic::dataBase >(){ // null constructor } // A LOT OF FUNCTION DEFINITIONS HERE }; void register_GenericDatabase_class(){ { //::postLib::generic::dataBase typedef bp::class_< dataBase_wrapper, boost::noncopyable > GenericDatabase_exposer_t; GenericDatabase_exposer_t GenericDatabase_exposer = GenericDatabase_exposer_t( "GenericDatabase", bp::init< >() ); bp::scope GenericDatabase_scope( GenericDatabase_exposer ); // A LOT OF FUNCTION DEFINITIONS HERE } NastranDatabase : #include "boost/python.hpp" #include "pyferespost.h" #include "NastranDatabase.pypp.hpp" namespace bp = boost::python; struct dataBase_wrapper : postLib::nastran::dataBase, bp::wrapper< postLib::nastran::dataBase > { dataBase_wrapper( ) : postLib::nastran::dataBase( ) , bp::wrapper< postLib::nastran::dataBase >(){ // null constructor } // A LOT OF FUNCTION DEFINITIONS HERE }; void register_NastranDatabase_class(){ bp::class_< dataBase_wrapper, bp::bases< postLib::generic::dataBase >, boost::noncopyable >( "NastranDatabase") .def(bp::init< >() ) // A LOT OF .def HERE } Is there a problem in my wrappers? Why is the NastranDatabase constructor never called (it should call both)? Any idea? Thanks in advance. |
From: Roman Y. <rom...@gm...> - 2008-09-18 10:55:56
|
On Thu, Sep 18, 2008 at 3:41 PM, Vincent Ferries <vin...@gm...> wrote: > Bad evaluation. > > I have a class NastranDatabase which inherits from GenericDatabase. > When I call the constructor of the NastranDatabase, the only one constructor > called is the GenericDatabase one... not both. > > I tried to make a very simple example with this two classes and it works > perfectly fine. > > Here is the file database.cpp : > #include "database.h" > #include <iomanip> > #include <iostream> > using namespace std ; > using namespace postLib; > using namespace generic; > database::database(void) { > cout << "Constructeur de la Generic Database." << endl; > } > > > Here is the file nastranDatabase.cpp : > #include "nastranDatabase.h" > #include <iomanip> > #include <iostream> > using namespace std ; > using namespace postLib; > using namespace nastran; > database::database(void) : generic::database() { > cout << "Constructeur de la Nastran Database." << endl; > } > > My code generator : > import os > import pyplusplus > import common_utils > from environment import settings > from pyplusplus import code_creators > from pyplusplus import module_builder > from pyplusplus import messages > from pygccxml import declarations > from pyplusplus.module_builder import call_policies > from pyplusplus import function_transformers as FT > license = \ > """ > /* > * My program license > */ > """ > def export(): > global license > header_files = [os.path.join(settings.ferespost_path, "pyferespost.h")] > # Create configuration for GCC-XML parser > # Initialize module builder > mb = module_builder.module_builder_t(header_files, > gccxml_path=settings.gccxml_path, working_directory=settings.ferespost_path, > include_paths=[settings.ferespost_path], define_symbols=[]) > #Well, don't you want to see what is going on? > # Please be quiet... I'll be grateful > # mb.print_declarations() > > mb.classes().exclude() > genericDatabase = > mb.namespace('postLib').namespace('generic').class_('database') > genericDatabase.include() > > nastranDatabase = > mb.namespace('postLib').namespace('nastran').class_('database') > nastranDatabase.include() > > genericDatabase.rename('Generic' + genericDatabase.name.capitalize()) > nastranDatabase.rename('Nastran' + nastranDatabase.name.capitalize()) > > #Creating code creator. After this step you should not modify/customize > declarations. > mb.build_code_creator(settings.module_name) > mb.code_creator.license = license > mb.code_creator.user_defined_directories.append(settings.ferespost_path) > mb.code_creator.precompiled_header = 'boost/python.hpp' > #Writing code to multiple files, much easier to add missing call_policies. > mb.split_module(settings.generated_files_dir) > # Main generation fonction > if __name__ == '__main__': > export() > print 'done' > > The test program and its output : > import pyferespost > print "Generic Database : " > pyferespost.GenericDatabase() > print "Nastran Database : " > pyferespost.NastranDatabase() > > Generic Database : > Constructeur de la Generic Database. > Nastran Database : > Constructeur de la Generic Database. > Constructeur de la Nastran Database. > > > > So for now, all seems to be ok. > If I do the same things in my whole application, when I instanciate a > NastranDatabase, the only constructor called is the GenericDatabase one. > > Here is the corresponding generated code for the constructor definition : > > GenericDatabase : > #include "boost/python.hpp" > #include "pyferespost.h" > #include "GenericDatabase.pypp.hpp" > namespace bp = boost::python; > struct dataBase_wrapper : postLib::generic::dataBase, bp::wrapper< > postLib::generic::dataBase > { > dataBase_wrapper( ) > : postLib::generic::dataBase( ) > , bp::wrapper< postLib::generic::dataBase >(){ > // null constructor > } > // A LOT OF FUNCTION DEFINITIONS HERE > }; > > void register_GenericDatabase_class(){ > { //::postLib::generic::dataBase > typedef bp::class_< dataBase_wrapper, boost::noncopyable > > GenericDatabase_exposer_t; > GenericDatabase_exposer_t GenericDatabase_exposer = > GenericDatabase_exposer_t( "GenericDatabase", bp::init< >() ); > bp::scope GenericDatabase_scope( GenericDatabase_exposer ); > // A LOT OF FUNCTION DEFINITIONS HERE > } > > NastranDatabase : > > #include "boost/python.hpp" > #include "pyferespost.h" > #include "NastranDatabase.pypp.hpp" > namespace bp = boost::python; > struct dataBase_wrapper : postLib::nastran::dataBase, bp::wrapper< > postLib::nastran::dataBase > { > dataBase_wrapper( ) > : postLib::nastran::dataBase( ) > , bp::wrapper< postLib::nastran::dataBase >(){ > // null constructor > } > // A LOT OF FUNCTION DEFINITIONS HERE > }; > > > void register_NastranDatabase_class(){ > > bp::class_< dataBase_wrapper, bp::bases< postLib::generic::dataBase >, > boost::noncopyable >( "NastranDatabase") > .def(bp::init< >() ) > // A LOT OF .def HERE > } > > > Is there a problem in my wrappers? > Why is the NastranDatabase constructor never called (it should call both)? > > Any idea? May be. Can you send me Py++ warnings you get? -- Roman Yakovenko C++ Python language binding http://www.language-binding.net/ |
From: Vincent F. <vin...@gm...> - 2008-09-22 10:17:49
|
Roman helped me solving the problem. In fact I had two classes with the same name in different namespaces juste like this ns1::ns2::A ns1::ns2bis::A with ns1::ns2bis::A extends ns1::ns2::A When I called ns1::ns2bis::A constructor it just called ns1::ns2::A one. I used to rename these classes (prefixing it whith their namespace name) but the wrappers in boost had allways the same name. I prefixed the wrappers name just like I did with the classes and it just works fine now. Here is a solution to prefix both class name and wrapper name with the namespace-name : # Prefixes the classes and wrappers with their namespace name def rename_in_namespace(mb, nameList): for namespaceName in nameList: nspace = mb.namespace('postLib').namespace(namespaceName, recursive=False) for clz in nspace.classes(): clz.rename(namespaceName.capitalize() + clz.name.capitalize()) clz.wrapper_alias = 'wrapper_' + namespaceName.capitalize() + clz.name.capitalize() I hope that it could help someone. 2008/9/19 Roman Yakovenko <rom...@gm...> > On Fri, Sep 19, 2008 at 10:55 AM, Vincent Ferries > <vin...@gm...> wrote: > > Here is the py++ trace : > > > > ... > > > > Nothing which deals with generic or nastran database. > > > > Any idea? > > No. I suggest you to send me privately the original header files, you > try to wrap and your Py++ script, the whole script. > > I am sure you don't tell me some important detail. I need them to > solve your problem. > > P.S. you don't have to wary about confidentiality > you really have to send me the original files and script > > -- > Roman Yakovenko > C++ Python language binding > http://www.language-binding.net/ > |
From: Vincent F. <vin...@gm...> - 2008-06-04 10:11:30
|
Sorry, here is the sconstruct file content : #! /usr/python # author Vincent FERRIES import os import sys from environment import settings def get_shlibsuffix(): if sys.platform == 'win32': return '.pyd' else: return '.so' def get_ccflags(): if sys.platform == 'win32': return ['/MD', '/EHsc', '/GR'] else: return [] def get_py_ferespost_files(): source_files = filter(lambda s: s.endswith('.cpp'), os.listdir(settings.generated_files_dir)) return map(lambda fname: os.path.join(settings.generated_files_dir, fname), source_files) def get_target(): return os.path.join(settings.unittests_dir, settings.module_name + get_shlibsuffix()) SharedLibrary(target=get_target(), source=[get_py_ferespost_files()], LIBS=['boost_python'], LIB_PATH=[settings.boost_libs_path, settings.python_libs_path], CPPPATH=[settings.boost_path, settings.working_dir, settings.ferespost_path, settings.python_include_path], CCFLAGS=get_ccflags(), SHLIBPREFIX='', SHLIBSUFFIX=get_shlibsuffix()) 2008/6/4, Vincent Ferries <vin...@gm...>: > After a LOT of Roman's advices, I'm able to generate the .cpp file > corresponding to a big part of the library I'm currently wrapping. > > I tried to follow the examples given in the website and choosed to use > scons as my building tool. > > Like in pyEasyBmp example, I defined my properties file > (environnement.py) and a scons file. > > Unfortunately, all that's build is a .os, I don't really understand why... > Using file command, I get the following line : > ferespost.os: ELF 64-bit LSB relocatable, AMD x86-64, version 1 > (SYSV), not stripped > > Which normally correspond to a .o file if I don't mess up. > > environnement.py mainly contains the following definitions: > boost_path = '/usr/lib' > boost_libs_path = '/usr/lib' > gccxml_path = '/usr/bin/gccxml' > pygccxml_path = '/usr/lib/python2.4/site-packages/pygccxml' > pyplusplus_path = '/usr/lib/python2.4/site-packages/pyplusplus' > ferespost_path = '/people/ferries/ferespost/SRC' > python_libs_path = '/usr/lib/python2.4' > python_include_path = '/usr/include/python2.4' > working_dir = '/people/ferries/ferespost' > generated_files_dir = '/people/ferries/ferespost/generated' > unittests_dir = '/people/ferries/ferespost/unittests' > > The sconstruct file is joined to the present e-mail. > > Thanks again for all your help. > > PS : I'm ever trying to convince my client to publish the wrapper as > an open source library. > |
From: Roman Y. <rom...@gm...> - 2008-06-04 10:37:52
|
On Wed, Jun 4, 2008 at 12:00 PM, Vincent Ferries <vin...@gm...> wrote: > After a LOT of Roman's advices, I'm able to generate the .cpp file > corresponding to a big part of the library I'm currently wrapping. > > I tried to follow the examples given in the website and choosed to use > scons as my building tool. > > Like in pyEasyBmp example, I defined my properties file > (environnement.py) and a scons file. > > Unfortunately, all that's build is a .os, I don't really understand why... What do you expect? When you compile Py++ generated files, you get extension module. After this, you can import it as regular python module. Am I missing something? > Using file command, I get the following line : > ferespost.os: ELF 64-bit LSB relocatable, AMD x86-64, version 1 > (SYSV), not stripped > > Which normally correspond to a .o file if I don't mess up. > > environnement.py mainly contains the following definitions: > boost_path = '/usr/lib' > boost_libs_path = '/usr/lib' > gccxml_path = '/usr/bin/gccxml' > pygccxml_path = '/usr/lib/python2.4/site-packages/pygccxml' > pyplusplus_path = '/usr/lib/python2.4/site-packages/pyplusplus' > ferespost_path = '/people/ferries/ferespost/SRC' > python_libs_path = '/usr/lib/python2.4' > python_include_path = '/usr/include/python2.4' > working_dir = '/people/ferries/ferespost' > generated_files_dir = '/people/ferries/ferespost/generated' > unittests_dir = '/people/ferries/ferespost/unittests' > > The sconstruct file is joined to the present e-mail. > > Thanks again for all your help. > > PS : I'm ever trying to convince my client to publish the wrapper as > an open source library. > > ------------------------------------------------------------------------- > Check out the new SourceForge.net Marketplace. > It's the best place to buy or sell services for > just about anything Open Source. > http://sourceforge.net/services/buy/index.php > _______________________________________________ > pygccxml-development mailing list > pyg...@li... > https://lists.sourceforge.net/lists/listinfo/pygccxml-development > -- Roman Yakovenko C++ Python language binding http://www.language-binding.net/ |
From: Roman Y. <rom...@gm...> - 2008-06-04 10:46:32
|
On Wed, Jun 4, 2008 at 1:42 PM, Vincent Ferries <vin...@gm...> wrote: > Yes, but in my case it's called .os and not .so and it doesn't > correspond to a share library (see the file command result). > I've double looked my scontruct file and don't catch the error. This is what I missed. I guess for some reason "link" step didn't run. Can you post scons output? -- Roman Yakovenko C++ Python language binding http://www.language-binding.net/ |
From: Vincent F. <vin...@gm...> - 2008-06-04 12:38:32
|
Ok, I have it working now, just a problem writting the lib name. But when I try to launch it with the simplest possible example : import ferespost dataBase = ferespost.dataBase() I get the following error : Traceback (most recent call last): File "test.py", line 1, in ? import ferespost ImportError: /people/ferries/ferespost/unittests/ferespost.so: _ZTIN7postLib7nastran8dataBaseE Any idea of what's going wrong? This dataBase is defined in the generated .cpp file as postLib::nastran::dataBase 2008/6/4, Vincent Ferries <vin...@gm...>: > Here is the output : > > scons: Reading SConscript files ... > scons: done reading SConscript files. > scons: Building targets ... > g++ -o generated/ferespost.os -c -fPIC -I/usr/lib -I. -ISRC > -I/usr/include/python2.4 generated/ferespost.cpp > scons: done building targets. > > > I don't understand why ferespost.os is in the generated command line, > nor why the .so isn't generated. > > 2008/6/4, Roman Yakovenko <rom...@gm...>: >> On Wed, Jun 4, 2008 at 1:42 PM, Vincent Ferries >> <vin...@gm...> wrote: >>> Yes, but in my case it's called .os and not .so and it doesn't >>> correspond to a share library (see the file command result). >>> I've double looked my scontruct file and don't catch the error. >> >> This is what I missed. I guess for some reason "link" step didn't run. >> Can you post scons output? >> >> >> -- >> Roman Yakovenko >> C++ Python language binding >> http://www.language-binding.net/ >> > |
From: Vincent F. <vin...@gm...> - 2008-06-04 15:06:00
|
I forgot two words (can't use copy/paste) . Here is the error. ImportError: /people/ferries/ferespost/unittests/ferespost.so: undefined symbol: _ZTIN7postLib7nastran8dataBaseE Any idea of the source of the problem? Thanks in advance. 2008/6/4, Vincent Ferries <vin...@gm...>: > Ok, I have it working now, just a problem writting the lib name. > But when I try to launch it with the simplest possible example : > > import ferespost > > dataBase = ferespost.dataBase() > > > I get the following error : > > Traceback (most recent call last): > File "test.py", line 1, in ? > import ferespost > ImportError: /people/ferries/ferespost/unittests/ferespost.so: > _ZTIN7postLib7nastran8dataBaseE > > Any idea of what's going wrong? > > This dataBase is defined in the generated .cpp file as > postLib::nastran::dataBase > > 2008/6/4, Vincent Ferries <vin...@gm...>: >> Here is the output : >> >> scons: Reading SConscript files ... >> scons: done reading SConscript files. >> scons: Building targets ... >> g++ -o generated/ferespost.os -c -fPIC -I/usr/lib -I. -ISRC >> -I/usr/include/python2.4 generated/ferespost.cpp >> scons: done building targets. >> >> >> I don't understand why ferespost.os is in the generated command line, >> nor why the .so isn't generated. >> >> 2008/6/4, Roman Yakovenko <rom...@gm...>: >>> On Wed, Jun 4, 2008 at 1:42 PM, Vincent Ferries >>> <vin...@gm...> wrote: >>>> Yes, but in my case it's called .os and not .so and it doesn't >>>> correspond to a share library (see the file command result). >>>> I've double looked my scontruct file and don't catch the error. >>> >>> This is what I missed. I guess for some reason "link" step didn't run. >>> Can you post scons output? >>> >>> >>> -- >>> Roman Yakovenko >>> C++ Python language binding >>> http://www.language-binding.net/ >>> >> > |
From: Gustavo C. <gjc...@gm...> - 2008-06-04 15:11:56
|
On 04/06/2008, Vincent Ferries <vin...@gm...> wrote: > > I forgot two words (can't use copy/paste) . > Here is the error. > > ImportError: /people/ferries/ferespost/unittests/ferespost.so: undefined > symbol: > _ZTIN7postLib7nastran8dataBaseE > > Any idea of the source of the problem? $ c++filt -t _ZTIN7postLib7nastran8dataBaseE typeinfo for postLib::nastran::dataBase See: http://www.dbforums.com/archive/index.php/t-352689.html In which they say one of the possible reasons is the class missing the implementation of a virtual method. Thanks in advance. > > > 2008/6/4, Vincent Ferries <vin...@gm...>: > > Ok, I have it working now, just a problem writting the lib name. > > But when I try to launch it with the simplest possible example : > > > > import ferespost > > > > dataBase = ferespost.dataBase() > > > > > > I get the following error : > > > > Traceback (most recent call last): > > File "test.py", line 1, in ? > > import ferespost > > ImportError: /people/ferries/ferespost/unittests/ferespost.so: > > _ZTIN7postLib7nastran8dataBaseE > > > > Any idea of what's going wrong? > > > > This dataBase is defined in the generated .cpp file as > > postLib::nastran::dataBase > > > > 2008/6/4, Vincent Ferries <vin...@gm...>: > >> Here is the output : > >> > >> scons: Reading SConscript files ... > >> scons: done reading SConscript files. > >> scons: Building targets ... > >> g++ -o generated/ferespost.os -c -fPIC -I/usr/lib -I. -ISRC > >> -I/usr/include/python2.4 generated/ferespost.cpp > >> scons: done building targets. > >> > >> > >> I don't understand why ferespost.os is in the generated command line, > >> nor why the .so isn't generated. > >> > >> 2008/6/4, Roman Yakovenko <rom...@gm...>: > >>> On Wed, Jun 4, 2008 at 1:42 PM, Vincent Ferries > >>> <vin...@gm...> wrote: > >>>> Yes, but in my case it's called .os and not .so and it doesn't > >>>> correspond to a share library (see the file command result). > >>>> I've double looked my scontruct file and don't catch the error. > >>> > >>> This is what I missed. I guess for some reason "link" step didn't run. > >>> Can you post scons output? > >>> > >>> > >>> -- > >>> Roman Yakovenko > >>> C++ Python language binding > >>> http://www.language-binding.net/ > >>> > >> > > > > ------------------------------------------------------------------------- > Check out the new SourceForge.net Marketplace. > It's the best place to buy or sell services for > just about anything Open Source. > http://sourceforge.net/services/buy/index.php > _______________________________________________ > pygccxml-development mailing list > pyg...@li... > https://lists.sourceforge.net/lists/listinfo/pygccxml-development > -- Gustavo J. A. M. Carneiro INESC Porto, Telecommunications and Multimedia Unit "The universe is always one step beyond logic." -- Frank Herbert |
From: Vincent F. <vin...@gm...> - 2008-06-04 15:51:10
|
I tried to comment all the virutal method definitions in my generated .cpp file. If I understand what was said on your link, the linker makes dynamic links for virtual functions which are not redefined in the same file while compiling which causes errors on runtime if it doesn't find them, just like in my case. But without any virtual function left, it should work. I compiled again and still have the same error when importing the module... 2008/6/4, Vincent Ferries <vin...@gm...>: > 2008/6/4, Gustavo Carneiro <gjc...@gm...>: >> On 04/06/2008, Vincent Ferries <vin...@gm...> wrote: >>> >>> I forgot two words (can't use copy/paste) . >>> Here is the error. >>> >>> ImportError: /people/ferries/ferespost/unittests/ferespost.so: undefined >>> symbol: >>> _ZTIN7postLib7nastran8dataBaseE >>> >>> Any idea of the source of the problem? >> >> >> $ c++filt -t _ZTIN7postLib7nastran8dataBaseE >> typeinfo for postLib::nastran::dataBase >> >> See: >> >> http://www.dbforums.com/archive/index.php/t-352689.html >> >> In which they say one of the possible reasons is the class missing the >> implementation of a virtual method. >> >> Thanks in advance. >>> >>> >>> 2008/6/4, Vincent Ferries <vin...@gm...>: >>> > Ok, I have it working now, just a problem writting the lib name. >>> > But when I try to launch it with the simplest possible example : >>> > >>> > import ferespost >>> > >>> > dataBase = ferespost.dataBase() >>> > >>> > >>> > I get the following error : >>> > >>> > Traceback (most recent call last): >>> > File "test.py", line 1, in ? >>> > import ferespost >>> > ImportError: /people/ferries/ferespost/unittests/ferespost.so: >>> > _ZTIN7postLib7nastran8dataBaseE >>> > >>> > Any idea of what's going wrong? >>> > >>> > This dataBase is defined in the generated .cpp file as >>> > postLib::nastran::dataBase >>> > >>> > 2008/6/4, Vincent Ferries <vin...@gm...>: >>> >> Here is the output : >>> >> >>> >> scons: Reading SConscript files ... >>> >> scons: done reading SConscript files. >>> >> scons: Building targets ... >>> >> g++ -o generated/ferespost.os -c -fPIC -I/usr/lib -I. -ISRC >>> >> -I/usr/include/python2.4 generated/ferespost.cpp >>> >> scons: done building targets. >>> >> >>> >> >>> >> I don't understand why ferespost.os is in the generated command line, >>> >> nor why the .so isn't generated. >>> >> >>> >> 2008/6/4, Roman Yakovenko <rom...@gm...>: >>> >>> On Wed, Jun 4, 2008 at 1:42 PM, Vincent Ferries >>> >>> <vin...@gm...> wrote: >>> >>>> Yes, but in my case it's called .os and not .so and it doesn't >>> >>>> correspond to a share library (see the file command result). >>> >>>> I've double looked my scontruct file and don't catch the error. >>> >>> >>> >>> This is what I missed. I guess for some reason "link" step didn't >>> >>> run. >>> >>> Can you post scons output? >>> >>> >>> >>> >>> >>> -- >>> >>> Roman Yakovenko >>> >>> C++ Python language binding >>> >>> http://www.language-binding.net/ >>> >>> >>> >> >>> > >>> >>> ------------------------------------------------------------------------- >>> Check out the new SourceForge.net Marketplace. >>> It's the best place to buy or sell services for >>> just about anything Open Source. >>> http://sourceforge.net/services/buy/index.php >>> _______________________________________________ >>> pygccxml-development mailing list >>> pyg...@li... >>> https://lists.sourceforge.net/lists/listinfo/pygccxml-development >>> >> >> >> >> -- >> Gustavo J. A. M. Carneiro >> INESC Porto, Telecommunications and Multimedia Unit >> "The universe is always one step beyond logic." -- Frank Herbert >> > |
From: Roman Y. <rom...@gm...> - 2008-06-04 17:59:33
|
On Wed, Jun 4, 2008 at 6:51 PM, Vincent Ferries <vin...@gm...> wrote: > I tried to comment all the virutal method definitions in my generated .cpp file. > If I understand what was said on your link, the linker makes dynamic > links for virtual functions which are not redefined in the same file > while compiling which causes errors on runtime if it doesn't find > them, just like in my case. > > But without any virtual function left, it should work. > > I compiled again and still have the same error when importing the module... If I should guess, than or you forgot to add to the link line some of your libraries or your new module depends on some other so and cannot find it or there is something else :-) -- Roman Yakovenko C++ Python language binding http://www.language-binding.net/ |
From: Vincent F. <vin...@gm...> - 2008-06-05 07:15:15
|
The library I try to wrap is an open source library called ferespost used in aerospace calculation. I'm currently trying to wrap one of the main classes postLib::nastran::dataBase which implements postLib::generic::dataBase. I generated the wrapping class, addind all the missing include .h and defining all the missing call_policies so that I haven't any error generating the .cpp file. I compiled it using the sconstruct file I found in the pyEasyBmp example, modifying it according to my configuration. I also tried to comment all the virtual function definitions to see if it was causing my problem. Do I really have to wrap all of the files/classes from the library I'd like to use to be able to compile, or can I simply use a part of it like I'm trying to do actually? 2008/6/4, Roman Yakovenko <rom...@gm...>: > On Wed, Jun 4, 2008 at 6:51 PM, Vincent Ferries > <vin...@gm...> wrote: >> I tried to comment all the virutal method definitions in my generated .cpp >> file. >> If I understand what was said on your link, the linker makes dynamic >> links for virtual functions which are not redefined in the same file >> while compiling which causes errors on runtime if it doesn't find >> them, just like in my case. >> >> But without any virtual function left, it should work. >> >> I compiled again and still have the same error when importing the >> module... > > If I should guess, than > or you forgot to add to the link line some of your libraries > or your new module depends on some other so and cannot find it > or there is something else :-) > > -- > Roman Yakovenko > C++ Python language binding > http://www.language-binding.net/ > |
From: Vincent F. <vin...@gm...> - 2008-06-05 07:55:33
|
The most curious thing is that the error deals with the only class I'm actually trying to make accessible... I'd have understood if it came from an inclusion class... 2008/6/5, Vincent Ferries <vin...@gm...>: > The library I try to wrap is an open source library called ferespost > used in aerospace calculation. > > I'm currently trying to wrap one of the main classes > postLib::nastran::dataBase which implements > postLib::generic::dataBase. > I generated the wrapping class, addind all the missing include .h and > defining all the missing call_policies so that I haven't any error > generating the .cpp file. > > I compiled it using the sconstruct file I found in the pyEasyBmp > example, modifying it according to my configuration. > > I also tried to comment all the virtual function definitions to see if > it was causing my problem. > > Do I really have to wrap all of the files/classes from the library I'd > like to use to be able to compile, or can I simply use a part of it > like I'm trying to do actually? > > 2008/6/4, Roman Yakovenko <rom...@gm...>: >> On Wed, Jun 4, 2008 at 6:51 PM, Vincent Ferries >> <vin...@gm...> wrote: >>> I tried to comment all the virutal method definitions in my generated >>> .cpp >>> file. >>> If I understand what was said on your link, the linker makes dynamic >>> links for virtual functions which are not redefined in the same file >>> while compiling which causes errors on runtime if it doesn't find >>> them, just like in my case. >>> >>> But without any virtual function left, it should work. >>> >>> I compiled again and still have the same error when importing the >>> module... >> >> If I should guess, than >> or you forgot to add to the link line some of your libraries >> or your new module depends on some other so and cannot find it >> or there is something else :-) >> >> -- >> Roman Yakovenko >> C++ Python language binding >> http://www.language-binding.net/ >> > |
From: Vincent F. <vin...@gm...> - 2008-06-05 15:07:19
|
I successfully runned the example pyeasybmp on my platform. I can run the examples from start to end without any problem. I generate my .so libs with the same environment variables, and the same scontruct file. I tried to make a lib of a very simple file with no dependency. I still encounter the same problem... The only difference I see is that there are just .h files in the pyeasybmp example and that I have a .h and a .cpp file. Does it influence the results? How can I do it then? Here is the err.h I'm trying to wrap, the error message is still the same (it follows) // // Copyright 2005-2008 Renaud Sizaire // // This file is part of FeResPost. // // FeResPost is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // FeResPost is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with FeResPost; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // #ifndef ERR_H #define ERR_H #include <iostream> #include <stdexcept> #include <string> namespace postLib { class err { private : std::string functionName ; std::string fileName ; int lineNumber ; std::string message ; static bool Ok ; public : err(void) ; err(std::string fuName,std::string fiName,int liNumber,std::string msg) ; err(std::string fiName,int liNumber,std::string msg) ; err(const err &in) ; ~err(void) ; void write(std::ostream &out) const ; void exec(std::ostream &out) ; void exec(void) ; static void setOk(bool) ; static bool getOk(void) ; static void flushStdStreams(void) ; } ; } #define errThrow(a,b) { \ err::flushStdStreams(); \ err brol(a,__FILE__,__LINE__,b); \ brol.write(std::cerr); \ throw(brol); \ } #define errWrite(a,b) { \ err::flushStdStreams(); \ err (a,__FILE__,__LINE__,b).exec(); \ err::setOk(false); \ } #define catchAll(a,b) catch(err) { \ err::flushStdStreams(); \ std::cerr << "Error caught in : " << __FILE__ << ":" << __LINE__ << endl ; \ std::cerr << " in function : " << a << endl ; \ std::cerr << " with message : " << b << endl ; \ err brol(a,__FILE__,__LINE__,b) ; \ throw(brol) ; \ } \ catch(std::out_of_range) { \ err::flushStdStreams(); \ std::cerr << "Error caught in : " << __FILE__ << ":" << __LINE__ << endl ; \ std::cerr << " in function : " << a << endl ; \ std::cerr << " with message : " << b << endl ; \ std::cerr << " error type : std::out_of_range" << endl ; \ err brol(a,__FILE__,__LINE__,b) ; \ throw(brol) ; \ } \ catch(std::bad_alloc) { \ err::flushStdStreams(); \ std::cerr << "Error caught in : " << __FILE__ << ":" << __LINE__ << endl ; \ std::cerr << " in function : " << a << endl ; \ std::cerr << " with message : " << b << endl ; \ std::cerr << " error type : std::bad_alloc" << endl ; \ err brol(a,__FILE__,__LINE__,b) ; \ throw(brol) ; \ } \ catch(...) { \ err::flushStdStreams(); \ std::cerr << "Error caught in : " << __FILE__ << ":" << __LINE__ << endl ; \ std::cerr << " in function : " << a << endl ; \ std::cerr << " with message : " << b << endl ; \ std::cerr << " error type : unknown" << endl ; \ err brol(a,__FILE__,__LINE__,b) ; \ throw(brol) ; \ } #endif Traceback (most recent call last): File "test.py", line 4, in ? import ferespost ImportError: /people/ferries/ferespost/unittests/ferespost.so: undefined symbol: _ZN7postLib7errC1ERKS0_ Thanks again... 2008/6/5, Vincent Ferries <vin...@gm...>: > The most curious thing is that the error deals with the only class I'm > actually trying to make accessible... > I'd have understood if it came from an inclusion class... > > 2008/6/5, Vincent Ferries <vin...@gm...>: >> The library I try to wrap is an open source library called ferespost >> used in aerospace calculation. >> >> I'm currently trying to wrap one of the main classes >> postLib::nastran::dataBase which implements >> postLib::generic::dataBase. >> I generated the wrapping class, addind all the missing include .h and >> defining all the missing call_policies so that I haven't any error >> generating the .cpp file. >> >> I compiled it using the sconstruct file I found in the pyEasyBmp >> example, modifying it according to my configuration. >> >> I also tried to comment all the virtual function definitions to see if >> it was causing my problem. >> >> Do I really have to wrap all of the files/classes from the library I'd >> like to use to be able to compile, or can I simply use a part of it >> like I'm trying to do actually? >> >> 2008/6/4, Roman Yakovenko <rom...@gm...>: >>> On Wed, Jun 4, 2008 at 6:51 PM, Vincent Ferries >>> <vin...@gm...> wrote: >>>> I tried to comment all the virutal method definitions in my generated >>>> .cpp >>>> file. >>>> If I understand what was said on your link, the linker makes dynamic >>>> links for virtual functions which are not redefined in the same file >>>> while compiling which causes errors on runtime if it doesn't find >>>> them, just like in my case. >>>> >>>> But without any virtual function left, it should work. >>>> >>>> I compiled again and still have the same error when importing the >>>> module... >>> >>> If I should guess, than >>> or you forgot to add to the link line some of your libraries >>> or your new module depends on some other so and cannot find it >>> or there is something else :-) >>> >>> -- >>> Roman Yakovenko >>> C++ Python language binding >>> http://www.language-binding.net/ >>> >> > |
From: Roman Y. <rom...@gm...> - 2008-06-05 18:43:53
|
On Thu, Jun 5, 2008 at 6:07 PM, Vincent Ferries <vin...@gm...> wrote: > I successfully runned the example pyeasybmp on my platform. > I can run the examples from start to end without any problem. > I generate my .so libs with the same environment variables, and the > same scontruct file. > > I tried to make a lib of a very simple file with no dependency. > I still encounter the same problem... > > The only difference I see is that there are just .h files in the > pyeasybmp example and that I have a .h and a .cpp file. > Does it influence the results? > How can I do it then? > > Here is the err.h I'm trying to wrap, the error message is still the > same (it follows) > > > > > // > // Copyright 2005-2008 Renaud Sizaire > // > // This file is part of FeResPost. > // > // FeResPost is free software; you can redistribute it and/or modify > // it under the terms of the GNU General Public License as published by > // the Free Software Foundation; either version 2 of the License, or > // (at your option) any later version. > // > // FeResPost is distributed in the hope that it will be useful, > // but WITHOUT ANY WARRANTY; without even the implied warranty of > // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > // GNU General Public License for more details. > // > // You should have received a copy of the GNU General Public License > // along with FeResPost; if not, write to the Free Software > // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA > // > > #ifndef ERR_H > #define ERR_H > > #include <iostream> > #include <stdexcept> > #include <string> > > namespace postLib { > > class err { > > private : > > std::string functionName ; > std::string fileName ; > int lineNumber ; > std::string message ; > > static bool Ok ; > > public : > > err(void) ; > err(std::string fuName,std::string fiName,int liNumber,std::string msg) ; > err(std::string fiName,int liNumber,std::string msg) ; > err(const err &in) ; > ~err(void) ; > > void write(std::ostream &out) const ; > void exec(std::ostream &out) ; > void exec(void) ; > > static void setOk(bool) ; > static bool getOk(void) ; > > static void flushStdStreams(void) ; > > } ; > > } > > #define errThrow(a,b) { \ > err::flushStdStreams(); \ > err brol(a,__FILE__,__LINE__,b); \ > brol.write(std::cerr); \ > throw(brol); \ > } > > #define errWrite(a,b) { \ > err::flushStdStreams(); \ > err (a,__FILE__,__LINE__,b).exec(); \ > err::setOk(false); \ > } > > #define catchAll(a,b) catch(err) { \ > err::flushStdStreams(); \ > std::cerr << "Error caught in : " << __FILE__ << ":" << __LINE__ << endl ; \ > std::cerr << " in function : " << a << endl ; \ > std::cerr << " with message : " << b << endl ; \ > err brol(a,__FILE__,__LINE__,b) ; \ > throw(brol) ; \ > } \ > catch(std::out_of_range) { \ > err::flushStdStreams(); \ > std::cerr << "Error caught in : " << __FILE__ << ":" << __LINE__ << endl ; \ > std::cerr << " in function : " << a << endl ; \ > std::cerr << " with message : " << b << endl ; \ > std::cerr << " error type : std::out_of_range" << endl ; \ > err brol(a,__FILE__,__LINE__,b) ; \ > throw(brol) ; \ > } \ > catch(std::bad_alloc) { \ > err::flushStdStreams(); \ > std::cerr << "Error caught in : " << __FILE__ << ":" << __LINE__ << endl ; \ > std::cerr << " in function : " << a << endl ; \ > std::cerr << " with message : " << b << endl ; \ > std::cerr << " error type : std::bad_alloc" << endl ; \ > err brol(a,__FILE__,__LINE__,b) ; \ > throw(brol) ; \ > } \ > catch(...) { \ > err::flushStdStreams(); \ > std::cerr << "Error caught in : " << __FILE__ << ":" << __LINE__ << endl ; \ > std::cerr << " in function : " << a << endl ; \ > std::cerr << " with message : " << b << endl ; \ > std::cerr << " error type : unknown" << endl ; \ > err brol(a,__FILE__,__LINE__,b) ; \ > throw(brol) ; \ > } > > #endif > > > > > Traceback (most recent call last): > File "test.py", line 4, in ? > import ferespost > ImportError: /people/ferries/ferespost/unittests/ferespost.so: > undefined symbol: _ZN7postLib7errC1ERKS0_ > > > Thanks again... I think the error is not related to Boost.Python. Did you tried to create small executable that uses the library you wrap? I guess you will get same error. May it worse to take this error to ferespost developers? Did you try to adjust LD_LIBRARY_PATH, so it will contain path to ferespost so file? If ferespost supports static linakge, maybe it worse to try that mode? -- Roman Yakovenko C++ Python language binding http://www.language-binding.net/ |
From: Vincent F. <vin...@gm...> - 2008-06-05 22:22:51
|
Unfortunately, ferespost is just a C++ library of nastran files post treatment. It has been written et wrapped in order to be implemented in ruby. It's open source and I work with the pure C++ sources, trying to wrap them using py++. This lib actually works included in a python app. I don't think the ferespost conceptor has the ability to help me converting it to python. I'll try to verify/adjust the LD_LIBRARY_PATH tomorrow in the morning at work... But I didn't have to do that with the pyeasybmp example... |
From: Vincent F. <vin...@gm...> - 2008-06-09 07:47:26
|
I tested my examples again. I've merged a .h and the corresponding .cpp files together and it seems to work. According to me, the code in the .cpp file was not read, that's the reason why the method body code was never found. What was I doing wrong? What did I miss to include the .cpp code? Thanks in advance. 2008/6/6, Vincent Ferries <vin...@gm...>: > Unfortunately, ferespost is just a C++ library of nastran files post > treatment. > It has been written et wrapped in order to be implemented in ruby. > > It's open source and I work with the pure C++ sources, trying to wrap them > using py++. > This lib actually works included in a python app. > I don't think the ferespost conceptor has the ability to help me converting > it to python. > > I'll try to verify/adjust the LD_LIBRARY_PATH tomorrow in the morning at > work... > But I didn't have to do that with the pyeasybmp example... > |
From: Vincent F. <vin...@gm...> - 2008-06-09 15:35:40
|
I now include my cpp code with the directive : mb.code_creator.add_include(myCorrespondingCppFile.cpp) Is this the right way to do it? And another question (yes, again...). The project I'm trying to wrap is quite complex and has a lot of cross-dependencies. (a file A including another file B which include A for example). I don't know how to déclare such dependencies using py++. Any help would be appreciated. 2008/6/9, Vincent Ferries <vin...@gm...>: > I tested my examples again. > > I've merged a .h and the corresponding .cpp files together and it seems to > work. > > According to me, the code in the .cpp file was not read, that's the > reason why the method body code was never found. > > What was I doing wrong? > What did I miss to include the .cpp code? > > Thanks in advance. > > 2008/6/6, Vincent Ferries <vin...@gm...>: >> Unfortunately, ferespost is just a C++ library of nastran files post >> treatment. >> It has been written et wrapped in order to be implemented in ruby. >> >> It's open source and I work with the pure C++ sources, trying to wrap them >> using py++. >> This lib actually works included in a python app. >> I don't think the ferespost conceptor has the ability to help me >> converting >> it to python. >> >> I'll try to verify/adjust the LD_LIBRARY_PATH tomorrow in the morning at >> work... >> But I didn't have to do that with the pyeasybmp example... >> > |
From: Roman Y. <rom...@gm...> - 2008-06-09 19:29:43
|
On Mon, Jun 9, 2008 at 6:35 PM, Vincent Ferries <vin...@gm...> wrote: > I now include my cpp code with the directive : > mb.code_creator.add_include(myCorrespondingCppFile.cpp) > > Is this the right way to do it? No. I generally doesn't include cpp files. I think the problem is here(scons file): def get_py_ferespost_files(): source_files = filter(lambda s: s.endswith('.cpp'), os.listdir(settings.generated_files_dir)) return map(lambda fname: os.path.join(settings.generated_files_dir, fname), source_files) If you generate code to a directory other than wrapped library code, than the cpp files of the library ( forepost )is not included into the build. Just update your scons. > And another question (yes, again...). > The project I'm trying to wrap is quite complex and has a lot of > cross-dependencies. > (a file A including another file B which include A for example). > I don't know how to déclare such dependencies using py++. > Any help would be appreciated. What do you mean "to declare dependencies"? -- Roman Yakovenko C++ Python language binding http://www.language-binding.net/ |
From: Vincent F. <vin...@gm...> - 2008-06-09 22:42:17
|
2008/6/9 Roman Yakovenko <rom...@gm...>: > On Mon, Jun 9, 2008 at 6:35 PM, Vincent Ferries > <vin...@gm...> wrote: > > I now include my cpp code with the directive : > > mb.code_creator.add_include(myCorrespondingCppFile.cpp) > > > > Is this the right way to do it? > > No. I generally doesn't include cpp files. > > I think the problem is here(scons file): > > def get_py_ferespost_files(): > source_files = filter(lambda s: s.endswith('.cpp'), > os.listdir(settings.generated_files_dir)) > return map(lambda fname: os.path.join(settings.generated_files_dir, > fname), source_files) > I currently use this method to generate the library from the generated source. > > If you generate code to a directory other than wrapped library code, > than the cpp files of the library ( forepost )is not included into the > build. Just update your scons. > That's the case, but there are many folders (and subfolders) where the sources are. I don't know where I need to generate and how I can manage all the dependencies. > > > > And another question (yes, again...). > > The project I'm trying to wrap is quite complex and has a lot of > > cross-dependencies. > > (a file A including another file B which include A for example). > > I don't know how to déclare such dependencies using py++. > > Any help would be appreciated. > > What do you mean "to declare dependencies"? > If I understand what you were saying, I can declare all the .h files into one same .h file and compile it to make the full library. Then, I have to compile all the .cpp sources and generated .cpp together to compile my .so file? > > -- > Roman Yakovenko > C++ Python language binding > http://www.language-binding.net/ > |
From: Roman Y. <rom...@gm...> - 2008-06-10 05:56:57
|
On Tue, Jun 10, 2008 at 1:42 AM, Vincent Ferries <vin...@gm...> wrote: > > > 2008/6/9 Roman Yakovenko <rom...@gm...>: >> >> On Mon, Jun 9, 2008 at 6:35 PM, Vincent Ferries >> <vin...@gm...> wrote: >> > I now include my cpp code with the directive : >> > mb.code_creator.add_include(myCorrespondingCppFile.cpp) >> > >> > Is this the right way to do it? >> >> No. I generally doesn't include cpp files. >> >> I think the problem is here(scons file): >> >> def get_py_ferespost_files(): >> source_files = filter(lambda s: s.endswith('.cpp'), >> os.listdir(settings.generated_files_dir)) >> return map(lambda fname: os.path.join(settings.generated_files_dir, >> fname), source_files) > > I currently use this method to generate the library from the generated > source. > >> >> If you generate code to a directory other than wrapped library code, >> than the cpp files of the library ( forepost )is not included into the >> build. Just update your scons. > > That's the case, but there are many folders (and subfolders) where the > sources are. > I don't know where I need to generate and how I can manage all the > dependencies. This question is not related to Py++. I suggest you to read SCONS documentation. >> >> > And another question (yes, again...). >> > The project I'm trying to wrap is quite complex and has a lot of >> > cross-dependencies. >> > (a file A including another file B which include A for example). >> > I don't know how to déclare such dependencies using py++. >> > Any help would be appreciated. >> >> What do you mean "to declare dependencies"? > > If I understand what you were saying, I can declare all the .h files into > one same .h file and compile it to make the full library. > > Then, I have to compile all the .cpp sources and generated .cpp together to > compile my .so file? No. You'd better compiler the project to standalone library and than add it to the link line. -- Roman Yakovenko C++ Python language binding http://www.language-binding.net/ |
From: Vincent F. <vin...@gm...> - 2008-06-10 13:11:11
|
I finished compiling the whole project as a standalone library and include it compiling my own wrappers. I've a much more elaborated example working. My problem now is that some classes redefine other ones and have the same name. For example I have the 3 following classes : ::postLib::nastran::dataBase, postLib::generic::dataBase and ::postLib::samcef::dataBase. I got some errors saying that this name is allready defined and don't really know how to distinguish them in the project. Any idea or workaround would be appreciated? Thanks again! 2008/6/10, Roman Yakovenko <rom...@gm...>: > On Tue, Jun 10, 2008 at 1:42 AM, Vincent Ferries > <vin...@gm...> wrote: >> >> >> 2008/6/9 Roman Yakovenko <rom...@gm...>: >>> >>> On Mon, Jun 9, 2008 at 6:35 PM, Vincent Ferries >>> <vin...@gm...> wrote: >>> > I now include my cpp code with the directive : >>> > mb.code_creator.add_include(myCorrespondingCppFile.cpp) >>> > >>> > Is this the right way to do it? >>> >>> No. I generally doesn't include cpp files. >>> >>> I think the problem is here(scons file): >>> >>> def get_py_ferespost_files(): >>> source_files = filter(lambda s: s.endswith('.cpp'), >>> os.listdir(settings.generated_files_dir)) >>> return map(lambda fname: os.path.join(settings.generated_files_dir, >>> fname), source_files) >> >> I currently use this method to generate the library from the generated >> source. >> >>> >>> If you generate code to a directory other than wrapped library code, >>> than the cpp files of the library ( forepost )is not included into the >>> build. Just update your scons. >> >> That's the case, but there are many folders (and subfolders) where the >> sources are. >> I don't know where I need to generate and how I can manage all the >> dependencies. > > This question is not related to Py++. I suggest you to read SCONS > documentation. > >>> >>> > And another question (yes, again...). >>> > The project I'm trying to wrap is quite complex and has a lot of >>> > cross-dependencies. >>> > (a file A including another file B which include A for example). >>> > I don't know how to déclare such dependencies using py++. >>> > Any help would be appreciated. >>> >>> What do you mean "to declare dependencies"? >> >> If I understand what you were saying, I can declare all the .h files into >> one same .h file and compile it to make the full library. >> >> Then, I have to compile all the .cpp sources and generated .cpp together >> to >> compile my .so file? > > No. You'd better compiler the project to standalone library and than > add it to the link line. > > -- > Roman Yakovenko > C++ Python language binding > http://www.language-binding.net/ > |
From: Roman Y. <rom...@gm...> - 2008-06-10 13:42:02
|
On Tue, Jun 10, 2008 at 4:11 PM, Vincent Ferries <vin...@gm...> wrote: > I finished compiling the whole project as a standalone library and > include it compiling my own wrappers. > I've a much more elaborated example working. > > My problem now is that some classes redefine other ones and have the same name. > For example I have the 3 following classes : > ::postLib::nastran::dataBase, postLib::generic::dataBase and > ::postLib::samcef::dataBase. > I got some errors saying that this name is allready defined and don't > really know how to distinguish them in the project. > > Any idea or workaround would be appreciated? Sorry, the question is too general and it is not related to Py++ functionality. -- Roman Yakovenko C++ Python language binding http://www.language-binding.net/ |