Page 1 of 2
Compiling the CMOD tools on a non-Windows platform
Posted: 09.02.2009, 21:29
by ajtribick
Is it just me or is the makefile provided in the src/tools/cmod directory a Windows-only file? I'm attempting to compile the CMOD tools on Ubuntu and not getting very far.
Re: Compiling the CMOD tools on a non-Windows platform
Posted: 09.02.2009, 22:29
by chris
ajtribick wrote:Is it just me or is the makefile provided in the src/tools/cmod directory a Windows-only file? I'm attempting to compile the CMOD tools on Ubuntu and not getting very far.
Yes, it's Windows only. I don't know enough about automake, etc. to do a Linux makefile. The cmod tools use the celengine library for loading and writing cmod problems--may this dependency is what's causing troubles?
--Chris
Re: Compiling the CMOD tools on a non-Windows platform
Posted: 09.02.2009, 23:07
by cartrite
I tried to compile 1 program on Linux and I don't think it found any headers. I got a ton of errors. So you may need to gather up all the headers the programs need or edit their paths in the cpp files.
cartrite
Re: Compiling the CMOD tools on a non-Windows platform
Posted: 09.02.2009, 23:22
by t00fri
I remember that I compiled the programs in the cmod directory under (SuSE)Linux a long long time ago, yet without any particular difficulties. I seem to remember that at first I was fiddling with quite a few symbolic links to get the header tree right.
But all this is really vanishing in the "fog" meanwhile
Fridger
Re: Compiling the CMOD tools on a non-Windows platform
Posted: 10.02.2009, 00:39
by chris
I committed a small change to cmodfix that will help it build with modern compilers. There was one place in the code that assumed old style for loop scoping rules (MSVC 2003 is the only widely used compiler that still had this as the default.) The fixed code will work compilers that use either old or modern for loop scoping.
--Chris
Re: Compiling the CMOD tools on a non-Windows platform
Posted: 10.02.2009, 20:31
by ajtribick
Well I'm trying compiling cmodfix directly using the g++ command rather than the makefile, getting the following errors:
Code: Select all
cmodfix.cpp:80: error: expected unqualified-id before ‘public’
cmodfix.cpp:84: error: expected class-name before ‘{’ token
cmodfix.cpp:112: error: expected class-name before ‘{’ token
cmodfix.cpp:148: error: expected class-name before ‘{’ token
cmodfix.cpp: In function ‘bool uniquifyVertices(Mesh&)’:
cmodfix.cpp:386: warning: deleting ‘const void*’ is undefined
cmodfix.cpp: In function ‘Mesh* generateNormals(Mesh&, float, bool)’:
cmodfix.cpp:719: error: no matching function for call to ‘joinVertices(std::vector<Face, std::allocator<Face> >&, const void*&, const Mesh::VertexDescription&, PointComparator)’
cmodfix.cpp:519: note: candidates are: void joinVertices(std::vector<Face, std::allocator<Face> >&, const void*, const Mesh::VertexDescription&, T&) [with T = PointComparator]
cmodfix.cpp: In function ‘Mesh* generateTangents(Mesh&, bool)’:
cmodfix.cpp:977: error: no matching function for call to ‘joinVertices(std::vector<Face, std::allocator<Face> >&, const void*&, const Mesh::VertexDescription&, PointTexCoordComparator)’
cmodfix.cpp:519: note: candidates are: void joinVertices(std::vector<Face, std::allocator<Face> >&, const void*, const Mesh::VertexDescription&, T&) [with T = PointTexCoordComparator]
cmodfix.cpp: In function ‘int main(int, char**)’:
cmodfix.cpp:1511: error: invalid conversion from ‘int’ to ‘std::_Ios_Openmode’
cmodfix.cpp:1511: error: initializing argument 2 of ‘std::basic_ofstream<_CharT, _Traits>::basic_ofstream(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]’
Is this gcc 4.3 being picky again?
Re: Compiling the CMOD tools on a non-Windows platform
Posted: 10.02.2009, 20:47
by cartrite
Gcc43 depreciated a lot of system headers. Sometimes all that will be needed is an extra #include. You may want to check this and see.
http://gcc.gnu.org/gcc-4.3/porting_to.html cartrite
Re: Compiling the CMOD tools on a non-Windows platform
Posted: 10.02.2009, 23:17
by chris
I just committed fixes for some of the errors that you're seeing from gcc. I tried building cmodfix on my Mac and hit some of the same problems (with gcc 4.0.1).
--Chris
Re: Compiling the CMOD tools on a non-Windows platform
Posted: 10.02.2009, 23:25
by ajtribick
So what options should I be using to compile it with?
I'm using g++ -I../.. -o cmodfix cmodfix.cpp
but I am pretty certain that I need to put more in there, because
Code: Select all
cmodfix.cpp: In function ‘bool uniquifyVertices(Mesh&)’:
cmodfix.cpp:386: warning: deleting ‘const void*’ is undefined
/tmp/ccogZMNl.o: In function `addGroupWithOffset(Mesh&, Mesh::PrimitiveGroup const&, unsigned int)':
cmodfix.cpp:(.text+0xa42): undefined reference to `Mesh::addGroup(Mesh::PrimitiveGroupType, unsigned int, unsigned int, unsigned int*)'
/tmp/ccogZMNl.o: In function `mergeModelMeshes(Model const&)':
cmodfix.cpp:(.text+0xa7a): undefined reference to `Model::getMesh(unsigned int) const'
cmodfix.cpp:(.text+0xa9e): undefined reference to `Model::getMesh(unsigned int) const'
cmodfix.cpp:(.text+0xaf1): undefined reference to `Model::Model()'
cmodfix.cpp:(.text+0xb52): undefined reference to `Model::getMaterial(unsigned int) const'
cmodfix.cpp:(.text+0xb5e): undefined reference to `Model::addMaterial(Mesh::Material const*)'
cmodfix.cpp:(.text+0xb71): undefined reference to `Model::getMaterial(unsigned int) const'
cmodfix.cpp:(.text+0xb9b): undefined reference to `Mesh::getVertexDescription() const'
cmodfix.cpp:(.text+0xbc3): undefined reference to `Mesh::getVertexDescription() const'
cmodfix.cpp:(.text+0xc61): undefined reference to `Mesh::Mesh()'
cmodfix.cpp:(.text+0xc79): undefined reference to `Mesh::setVertexDescription(Mesh::VertexDescription const&)'
cmodfix.cpp:(.text+0xcc9): undefined reference to `Mesh::setVertices(unsigned int, void*)'
cmodfix.cpp:(.text+0xd40): undefined reference to `Mesh::getGroup(unsigned int) const'
cmodfix.cpp:(.text+0xd5f): undefined reference to `Mesh::getGroup(unsigned int) const'
cmodfix.cpp:(.text+0xdb9): undefined reference to `Model::addMesh(Mesh*)'
/tmp/ccogZMNl.o: In function `copyVertex(void*, Mesh::VertexDescription const&, void const*, Mesh::VertexDescription const&, unsigned int, unsigned int const*)':
cmodfix.cpp:(.text+0xeb2): undefined reference to `Mesh::getVertexAttributeSize(Mesh::VertexAttributeFormat)'
/tmp/ccogZMNl.o: In function `augmentVertexDescription(Mesh::VertexDescription&, Mesh::VertexAttributeSemantic, Mesh::VertexAttributeFormat)':
cmodfix.cpp:(.text+0x108f): undefined reference to `Mesh::getVertexAttributeSize(Mesh::VertexAttributeFormat)'
cmodfix.cpp:(.text+0x10f9): undefined reference to `Mesh::getVertexAttributeSize(Mesh::VertexAttributeFormat)'
/tmp/ccogZMNl.o: In function `generateTangents(Mesh&, bool)':
cmodfix.cpp:(.text+0x1287): undefined reference to `Mesh::getVertexDescription() const'
cmodfix.cpp:(.text+0x1395): undefined reference to `Mesh::getGroup(unsigned int) const'
cmodfix.cpp:(.text+0x1458): undefined reference to `Mesh::getGroup(unsigned int) const'
cmodfix.cpp:(.text+0x1531): undefined reference to `Mesh::getGroup(unsigned int) const'
cmodfix.cpp:(.text+0x164d): undefined reference to `Mesh::getGroup(unsigned int) const'
cmodfix.cpp:(.text+0x1e4d): undefined reference to `Mesh::VertexDescription::VertexDescription(Mesh::VertexDescription const&)'
cmodfix.cpp:(.text+0x208f): undefined reference to `Mesh::getVertexAttributeSize(Mesh::VertexAttributeFormat)'
cmodfix.cpp:(.text+0x20fe): undefined reference to `Mesh::Mesh()'
cmodfix.cpp:(.text+0x211f): undefined reference to `Mesh::setVertexDescription(Mesh::VertexDescription const&)'
cmodfix.cpp:(.text+0x217c): undefined reference to `Mesh::setVertices(unsigned int, void*)'
cmodfix.cpp:(.text+0x21de): undefined reference to `Mesh::getGroup(unsigned int) const'
cmodfix.cpp:(.text+0x220c): undefined reference to `Mesh::addGroup(Mesh::PrimitiveGroupType, unsigned int, unsigned int, unsigned int*)'
cmodfix.cpp:(.text+0x22a9): undefined reference to `Mesh::VertexDescription::~VertexDescription()'
cmodfix.cpp:(.text+0x22d3): undefined reference to `Mesh::VertexDescription::~VertexDescription()'
/tmp/ccogZMNl.o: In function `generateNormals(Mesh&, float, bool)':
cmodfix.cpp:(.text+0x23dd): undefined reference to `Mesh::getVertexDescription() const'
cmodfix.cpp:(.text+0x2451): undefined reference to `Mesh::getGroup(unsigned int) const'
cmodfix.cpp:(.text+0x2589): undefined reference to `Mesh::getGroup(unsigned int) const'
cmodfix.cpp:(.text+0x2662): undefined reference to `Mesh::getGroup(unsigned int) const'
cmodfix.cpp:(.text+0x29ed): undefined reference to `Mesh::getGroup(unsigned int) const'
cmodfix.cpp:(.text+0x3025): undefined reference to `Mesh::VertexDescription::VertexDescription(Mesh::VertexDescription const&)'
cmodfix.cpp:(.text+0x3267): undefined reference to `Mesh::getVertexAttributeSize(Mesh::VertexAttributeFormat)'
cmodfix.cpp:(.text+0x32d6): undefined reference to `Mesh::Mesh()'
cmodfix.cpp:(.text+0x32f7): undefined reference to `Mesh::setVertexDescription(Mesh::VertexDescription const&)'
cmodfix.cpp:(.text+0x3354): undefined reference to `Mesh::setVertices(unsigned int, void*)'
cmodfix.cpp:(.text+0x33b6): undefined reference to `Mesh::getGroup(unsigned int) const'
cmodfix.cpp:(.text+0x33e4): undefined reference to `Mesh::addGroup(Mesh::PrimitiveGroupType, unsigned int, unsigned int, unsigned int*)'
cmodfix.cpp:(.text+0x3481): undefined reference to `Mesh::VertexDescription::~VertexDescription()'
cmodfix.cpp:(.text+0x34ab): undefined reference to `Mesh::VertexDescription::~VertexDescription()'
/tmp/ccogZMNl.o: In function `uniquifyVertices(Mesh&)':
cmodfix.cpp:(.text+0x3594): undefined reference to `Mesh::getVertexDescription() const'
cmodfix.cpp:(.text+0x3935): undefined reference to `Mesh::setVertices(unsigned int, void*)'
cmodfix.cpp:(.text+0x3948): undefined reference to `Mesh::remapIndices(std::vector<unsigned int, std::allocator<unsigned int> > const&)'
/tmp/ccogZMNl.o: In function `main':
cmodfix.cpp:(.text+0x3afd): undefined reference to `LoadModel(std::basic_istream<char, std::char_traits<char> >&)'
cmodfix.cpp:(.text+0x3b73): undefined reference to `LoadModel(std::basic_istream<char, std::char_traits<char> >&)'
cmodfix.cpp:(.text+0x3bca): undefined reference to `Model::Model()'
cmodfix.cpp:(.text+0x3c34): undefined reference to `Model::getMaterial(unsigned int) const'
cmodfix.cpp:(.text+0x3c43): undefined reference to `Model::addMaterial(Mesh::Material const*)'
cmodfix.cpp:(.text+0x3c5c): undefined reference to `Model::getMaterial(unsigned int) const'
cmodfix.cpp:(.text+0x3c87): undefined reference to `Model::getMesh(unsigned int) const'
cmodfix.cpp:(.text+0x3d77): undefined reference to `Model::addMesh(Mesh*)'
cmodfix.cpp:(.text+0x3d90): undefined reference to `Model::getMesh(unsigned int) const'
cmodfix.cpp:(.text+0x3df3): undefined reference to `Model::getMesh(unsigned int) const'
cmodfix.cpp:(.text+0x3e1f): undefined reference to `Model::getMesh(unsigned int) const'
cmodfix.cpp:(.text+0x3e53): undefined reference to `SaveModelBinary(Model const*, std::basic_ostream<char, std::char_traits<char> >&)'
cmodfix.cpp:(.text+0x3e69): undefined reference to `SaveModelAscii(Model const*, std::basic_ostream<char, std::char_traits<char> >&)'
cmodfix.cpp:(.text+0x3f30): undefined reference to `SaveModelBinary(Model const*, std::basic_ostream<char, std::char_traits<char> >&)'
cmodfix.cpp:(.text+0x3f45): undefined reference to `SaveModelAscii(Model const*, std::basic_ostream<char, std::char_traits<char> >&)'
/tmp/ccogZMNl.o: In function `MeshVertexDescComparator::operator()(Mesh const*, Mesh const*) const':
cmodfix.cpp:(.text._ZNK24MeshVertexDescComparatorclEPK4MeshS2_[MeshVertexDescComparator::operator()(Mesh const*, Mesh const*) const]+0x1a): undefined reference to `Mesh::getVertexDescription() const'
cmodfix.cpp:(.text._ZNK24MeshVertexDescComparatorclEPK4MeshS2_[MeshVertexDescComparator::operator()(Mesh const*, Mesh const*) const]+0x26): undefined reference to `Mesh::getVertexDescription() const'
collect2: ld returned 1 exit status
Re: Compiling the CMOD tools on a non-Windows platform
Posted: 11.02.2009, 01:42
by chris
ajtribick wrote:So what options should I be using to compile it with?
I'm using g++ -I../.. -o cmodfix cmodfix.cpp
but I am pretty certain that I need to put more in there, because
Right... You need to link with the Celestia libraries: celutil.a, celmath.a, cel3ds.a, celtxf.a, celengine.a
This long list of dependencies is unfortunate. We should really be able to isolate the cmod code into a single package, perhaps called libcmod.
--Chris
Re: Compiling the CMOD tools on a non-Windows platform
Posted: 11.02.2009, 19:49
by ajtribick
Ok where would I get those? I'm building the Qt4 version of Celestia, and it doesn't look like it builds the libraries...
Re: Compiling the CMOD tools on a non-Windows platform
Posted: 11.02.2009, 20:01
by chris
ajtribick wrote:Ok where would I get those? I'm building the Qt4 version of Celestia, and it doesn't look like it builds the libraries...
You're right... I wasn't able to get qmake to build them as separate libraries. I'll try and come up with some sort of workaround for you.
--Chris
Re: Compiling the CMOD tools on a non-Windows platform
Posted: 15.02.2009, 22:10
by ajtribick
Ok, now I'm really frustrated. Can't even get it to work on Windows XP. Building using the Visual Studio project doesn't seem to build the libraries, using makerelease.bat does but the build doesn't complete, and after doing that using nmake /f cmodtools.mak throws a "fatal error libc.lib not found" error. I'm guessing this is to do with the fact that I've got the 2008 version of Visual Studio.
The version of cmodfix.exe I downloaded from
http://www.celestiaproject.net/~claurel/celestia/cmodtools/ doesn't work either - every time I run it it just immediately exits without so much as a message. I guess it's an obsolete version?
Re: Compiling the CMOD tools on a non-Windows platform
Posted: 16.02.2009, 00:33
by selden
The cmod utilities available for downloading from Shatters require two graphics dlls which were distributed with Celestia v1.4.1:
libpng1.dll
zlib.dll
Put them in the same directory where you've put the utilities.
Re: Compiling the CMOD tools on a non-Windows platform
Posted: 21.02.2009, 12:19
by ajtribick
selden wrote:The cmod utilities available for downloading from Shatters require two graphics dlls which were distributed with Celestia v1.4.1:
libpng1.dll
zlib.dll
Put them in the same directory where you've put the utilities.
Thanks for the info, that's reduced the size of my upcoming W UMa binaries add-on quite a bit!
Re: Compiling the CMOD tools on a non-Windows platform
Posted: 18.09.2009, 17:06
by t00fri
Since this thread seemed to have ended in the void, let me give you the commands that I use to compile
cmodfix under Linux (
OpenSuse 10.3 and OpenSuse 11.1) and
latest SVN (1.6+).
Of course it implies already the conversion to
thirdparty libs (Eigen...)Doing a Makefile for all the CMOD tools in the tools/ directory is trivial, but I didn't want to spend my time with this, since the Makefile also needs to make sure that all the required libs etc are available, else they must also be compiled etc...That's also straightforward, but certainly a bit time consuming when it comes to these gory details.
Code: Select all
compile
========
g++ -c -I../.. -I ../../../thirdparty/Eigen cmodfix.cpp
link
=====
g++ -o cmodfix cmodfix.o ../../celengine/libcelengine.a ../../celutil/libcelutil.a ../../celmath/libcelmath.a ../../cel3ds/libcel3ds.a ../../celtxf/libceltxf.a -lGL -lGLU -llua /usr/local/cspice/lib/cspice.a -lpng -ljpeg
There is only one compiler warning (
gcc version 4.2.1 (OpenSuse 10.3) & gcc version 4.3.2 (OpenSuse 11.1) )
Code: Select all
cmodfix.cpp: In function ‘bool uniquifyVertices(Mesh&)’:
cmodfix.cpp:386: warning: deleting ‘const void*’ is undefined
So far, I have tested cmodfix by converting the binary phobos.cmod into the ascii version.
Further tests would be valuable.
Fridger
Re: Compiling the CMOD tools on a non-Windows platform
Posted: 18.09.2009, 18:25
by cartrite
Hi Fridger,
Tried your line and it failed to find Gl/glew.h.
Needed this too.
Code: Select all
-I ../../../thirdparty/glew/include
The line I had to use.
Code: Select all
g++ -c -I../.. -I ../../../thirdparty -I ../../../thirdparty/Eigen -I ../../../thirdparty/glew/include cmodfix.cpp
The link line worked fine.
cartrite
Re: Compiling the CMOD tools on a non-Windows platform
Posted: 18.09.2009, 18:45
by t00fri
cartrite wrote:Hi Fridger,
Tried your line and it failed to find Gl/glew.h.
Needed this too.
Code: Select all
-I ../../../thirdparty/glew/include
The line I had to use.
Code: Select all
g++ -c -I../.. -I ../../../thirdparty -I ../../../thirdparty/Eigen -I ../../../thirdparty/glew/include cmodfix.cpp
The link line worked fine.
cartrite
Well you don't have
glew, glew-devel and libGLEW from OpenSuSE 11.1 installed. Then you clearly need that internal reference. But under Linux glew is a standard library!?
Fridger
Re: Compiling the CMOD tools on a non-Windows platform
Posted: 18.09.2009, 19:13
by cartrite
Your right. I don't have them installed. I think I did at one point but I uninstalled them when I had trouble compiling Celestia when Glew was first enabled. I thought there may have been conflicts. Maybe I'll install them again since they don't cause any problems on your system.
cartrite
Re: Compiling the CMOD tools on a non-Windows platform
Posted: 18.09.2009, 19:22
by cartrite
Right after I built cmodfix, I tried to build 3dstocmod. That still needs some Eigen conversions. Got a few build errors. It builds great on 1.6.1. I wanted to build that last week when I was playing around with that Blender export script. Seems that specpower is being exported with 3dstocmod. Just seen that. But I can't figure out what Material variable to use with Blender to get specpower to be exported. I can export diffuse and specular color but specpower???????
cartrite