Compiling the CMOD tools on a non-Windows platform
Compiling the CMOD tools on a non-Windows platform
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.
-
- Site Admin
- Posts: 4211
- Joined: 28.01.2002
- With us: 22 years 9 months
- Location: Seattle, Washington, USA
Re: Compiling the CMOD tools on a non-Windows platform
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
- cartrite
- Posts: 1978
- Joined: 15.09.2005
- With us: 19 years 2 months
- Location: Pocono Mountains, Pennsylvania, USA Greate Grandfother from Irshava, Zakarpattia Oblast Ukraine
Re: Compiling the CMOD tools on a non-Windows platform
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
cartrite
VivoBook_ASUSLaptop X712JA_S712JA Intel(R) UHD Graphics 8gb ram. Intel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz, 1190 Mhz, 4 Core(s), 8 Logical Processor(s) 8 GB ram. Running on Windows 11 and OpenSuse 15.4
- t00fri
- Developer
- Posts: 8772
- Joined: 29.03.2002
- Age: 22
- With us: 22 years 7 months
- Location: Hamburg, Germany
Re: Compiling the CMOD tools on a non-Windows platform
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
But all this is really vanishing in the "fog" meanwhile
Fridger
-
- Site Admin
- Posts: 4211
- Joined: 28.01.2002
- With us: 22 years 9 months
- Location: Seattle, Washington, USA
Re: Compiling the CMOD tools on a non-Windows platform
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
--Chris
Re: Compiling the CMOD tools on a non-Windows platform
Well I'm trying compiling cmodfix directly using the g++ command rather than the makefile, getting the following errors:
Is this gcc 4.3 being picky again?
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?
Last edited by ajtribick on 10.02.2009, 23:02, edited 1 time in total.
- cartrite
- Posts: 1978
- Joined: 15.09.2005
- With us: 19 years 2 months
- Location: Pocono Mountains, Pennsylvania, USA Greate Grandfother from Irshava, Zakarpattia Oblast Ukraine
Re: Compiling the CMOD tools on a non-Windows platform
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
cartrite
VivoBook_ASUSLaptop X712JA_S712JA Intel(R) UHD Graphics 8gb ram. Intel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz, 1190 Mhz, 4 Core(s), 8 Logical Processor(s) 8 GB ram. Running on Windows 11 and OpenSuse 15.4
-
- Site Admin
- Posts: 4211
- Joined: 28.01.2002
- With us: 22 years 9 months
- Location: Seattle, Washington, USA
Re: Compiling the CMOD tools on a non-Windows platform
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
--Chris
Re: Compiling the CMOD tools on a non-Windows platform
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
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
-
- Site Admin
- Posts: 4211
- Joined: 28.01.2002
- With us: 22 years 9 months
- Location: Seattle, Washington, USA
Re: Compiling the CMOD tools on a non-Windows platform
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
Ok where would I get those? I'm building the Qt4 version of Celestia, and it doesn't look like it builds the libraries...
-
- Site Admin
- Posts: 4211
- Joined: 28.01.2002
- With us: 22 years 9 months
- Location: Seattle, Washington, USA
Re: Compiling the CMOD tools on a non-Windows platform
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
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?
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
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.
libpng1.dll
zlib.dll
Put them in the same directory where you've put the utilities.
Selden
Re: Compiling the CMOD tools on a non-Windows platform
Thanks for the info, that's reduced the size of my upcoming W UMa binaries add-on quite a bit!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.
- t00fri
- Developer
- Posts: 8772
- Joined: 29.03.2002
- Age: 22
- With us: 22 years 7 months
- Location: Hamburg, Germany
Re: Compiling the CMOD tools on a non-Windows platform
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.
There is only one compiler warning (gcc version 4.2.1 (OpenSuse 10.3) & gcc version 4.3.2 (OpenSuse 11.1) )
So far, I have tested cmodfix by converting the binary phobos.cmod into the ascii version.
Further tests would be valuable.
Fridger
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
- cartrite
- Posts: 1978
- Joined: 15.09.2005
- With us: 19 years 2 months
- Location: Pocono Mountains, Pennsylvania, USA Greate Grandfother from Irshava, Zakarpattia Oblast Ukraine
Re: Compiling the CMOD tools on a non-Windows platform
Hi Fridger,
Tried your line and it failed to find Gl/glew.h.
Needed this too.
The line I had to use.
The link line worked fine.
cartrite
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
VivoBook_ASUSLaptop X712JA_S712JA Intel(R) UHD Graphics 8gb ram. Intel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz, 1190 Mhz, 4 Core(s), 8 Logical Processor(s) 8 GB ram. Running on Windows 11 and OpenSuse 15.4
- t00fri
- Developer
- Posts: 8772
- Joined: 29.03.2002
- Age: 22
- With us: 22 years 7 months
- Location: Hamburg, Germany
Re: Compiling the CMOD tools on a non-Windows platform
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
- cartrite
- Posts: 1978
- Joined: 15.09.2005
- With us: 19 years 2 months
- Location: Pocono Mountains, Pennsylvania, USA Greate Grandfother from Irshava, Zakarpattia Oblast Ukraine
Re: Compiling the CMOD tools on a non-Windows platform
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
cartrite
VivoBook_ASUSLaptop X712JA_S712JA Intel(R) UHD Graphics 8gb ram. Intel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz, 1190 Mhz, 4 Core(s), 8 Logical Processor(s) 8 GB ram. Running on Windows 11 and OpenSuse 15.4
- cartrite
- Posts: 1978
- Joined: 15.09.2005
- With us: 19 years 2 months
- Location: Pocono Mountains, Pennsylvania, USA Greate Grandfother from Irshava, Zakarpattia Oblast Ukraine
Re: Compiling the CMOD tools on a non-Windows platform
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
cartrite
VivoBook_ASUSLaptop X712JA_S712JA Intel(R) UHD Graphics 8gb ram. Intel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz, 1190 Mhz, 4 Core(s), 8 Logical Processor(s) 8 GB ram. Running on Windows 11 and OpenSuse 15.4