Getting Started
First are you sure the library is not installed? On the lab centos machine we have installed most libraries you may need for doing computer graphics work. You can list the currently installed libs by using the ldconfig -p command. If you feed this into grep you can filter the results. For example to search for the location of the iMath library we can do the following
ldconfig -p | grep -i imath libImath.so.6 (libc6,x86-64) => /usr/lib64/libImath.so.6
You can see the path of the library from this ( /usr/lib64 ) and this can be added to the link path using the -L command on the compiler (more on this later).
If this doesn't find what you are looking for, the package may not be a dynamic library. We can search for static libs using the locate command as follows
locate libode /usr/local/lib/libode.a /usr/local/lib/libode.la
If you can confirm that the library is installed the next thing is to find the headers, again we can use the locate command. The following will find a specific header file (usually we will get a compile message saying can't find xxx.h).
locate ImathColor.h /opt/autodesk/maya2012-x64/devkit/Alembic/include/AlembicPrivate/OpenEXR/ImathColor.h /opt/hfs12.1.77/toolkit/include/OpenEXR/ImathColor.h /usr/local/include/OpenEXR/ImathColor.h /usr/local/include/OpenEXR/PyImathColor.hYou will see that in this case it is in several locations as some of the packages installed have included it. It is best to always use the /usr paths as these will correspond to the installed libraries. In this case we can add the include path -I/usr/local/include/
Setting things in Qt Creator
Qt creator uses qmake to configure the projects and the project locations. In particular there are two flags we need to set to add libraries and include paths as follows.
INCLUDEPATH+=/usr/local/include/collada-dom2.4/ LIBS+=-L/usr/lib -lcolladadom150Using the += option we can concatenate to the INCLUDEPATH keyword and absolute path to search for the libs, this will be translated to a -I flag in the compiler command line. The LIBS flag is passed verbatim to the linker so we need to use the correct commands in this case we use -L to indicate a library search path and -l for the library to be included. Note that the -l flag ignores the prefix lib and the postfix .so.x.x etc.
Once this is done your projects should be fine to run. You can also build and include libs in your own directories and link them using the project paths similar to above. If the lib created is a .a file it is a static lib it will be included in the build of the program. If you are linking to a dynamic lib (.so) you will need to tell the runtime linker where to find the library by setting the LD_LIBRARY_PATH environment variable (this is how the NGL lib is configured).
An Example
This example will show how to install a source package in a custom location (your home dir) using a typical automake style project found in most linux source packages.
First I'm going to download the ode source and extract it.
wget http://sourceforge.net/projects/opende/files/latest/download?source=files tar vfxj ode-0.12.tar.bz2 cd ode-0.12Typically now you would run ./configure; make; sudo make install; however as most users do not have access to sudo this will not work as the install will attempt to write files in the /usr file system which you don't have permission to. Instead we can ask the configure script to use another custom location which we do have permission to. In this case I'm going to use /home/jmacey/myOde as follows
./configure --prefix /home/jmacey/myOde make make installThe install will now place all the files in the directory $(HOME)/myOde and we can adjust our build paths accordingly, the following list shows what has been installed.
find . . ./include ./include/ode ./include/ode/error.h ./include/ode/odeconfig.h ./include/ode/timer.h ./include/ode/odemath.h ./include/ode/contact.h ./include/ode/odeinit.h ./include/ode/rotation.h ./include/ode/memory.h ./include/ode/collision.h ./include/ode/objects.h ./include/ode/collision_space.h ./include/ode/collision_trimesh.h ./include/ode/compatibility.h ./include/ode/common.h ./include/ode/mass.h ./include/ode/ode.h ./include/ode/export-dif.h ./include/ode/odemath_legacy.h ./include/ode/odecpp.h ./include/ode/matrix.h ./include/ode/misc.h ./include/ode/odecpp_collision.h ./lib ./lib/libode.la ./lib/pkgconfig ./lib/pkgconfig/ode.pc ./lib/libode.a ./bin ./bin/ode-config
No comments:
Post a Comment