Hello GameDev:)
I've finished my first simple game (Tictactoe) and I'm trying to make ready-to-run packages with all libs included, for Linux and Windows. I succeeded in compiling for both systems and making Windows package, however I have problem with 32-bit linux version (as in the tittle): compiled game doesn't detect libpng in its directory. Or maybe other libs too, but it's the only lib I have to copy to /usr/lib32/.
Some details:
My system: Debian Sid 64-bit
SDL libs: 32-bit, all latest possible (1.2.15)
GCC: 4.7
libpng: 1.2.49-1
So I'm building a 32-bit binary on a 64-bit linux system:
g++ *.cpp -I/my_include_dir/ -L/my_lib_dir/ -lSDL_image -lSDL_ttf -lSDL_mixer -lSDL -lpthread -ldl -lfreetype -lz -o build/tictactoe32 -m32
No compile errors. Apparently libpng is not needed during compilation.
However my game doesn't load images:
Error: Failed loading libpng.so.3: libpng.so.3: cannot open shared object file: No such file or directory
So I downloaded 32-bit version of libpng from Debian's site, libpng12.so.0.49.0, created a link to it with a name libpng.so.3 and copied both files to my game's dir and it didn't help.
I have to copy libpng.so.3 and libpng12.so.0.49.0 to /usr/lib32/. As I said, libpng.so.3 is only a link to a newer version, which in Debian is libpng12.so.0.49.0. And then it works. But when I move both files to my game's dir, it can't detect it.
How can I solve it?
[SOLVED] My game doesn't detect libpng in its directory (game packaging)
as you use sdl_image don't use also libpng. They might conflict, only use sdl_image which has all needed functions and is more simple to use.
Hi, thanks for the answer.
I don't use libpng directly in my code, it is loaded by SDL_image at runtime, when needed to load different kinds of images (png in this case). I use only SDL_image.
I don't use libpng directly in my code, it is loaded by SDL_image at runtime, when needed to load different kinds of images (png in this case). I use only SDL_image.
Solution:
I have to include '-rpath' flag with a specified directory in the command above so the directory will be searched at the runtime.
For example:
search the same dir as executable dir: -Wl,-rpath,.
search "libs" directory inside directory where is located executable: -Wl,-rpath,libs/
So now my command looks like this:
Useful commands:
Check which libraries will be loaded by the executable at runtime:
Check which directories will be searched for libraries:
Sources:
http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
http://www.eyrie.org/~eagle/notes/rpath.html
http://www.techytalk.info/c-cplusplus-library-programming-on-linux-part-one-static-libraries/ (3 parts)
in terminal: man ld
I have to include '-rpath' flag with a specified directory in the command above so the directory will be searched at the runtime.
For example:
search the same dir as executable dir: -Wl,-rpath,.
search "libs" directory inside directory where is located executable: -Wl,-rpath,libs/
So now my command looks like this:
g++ *.cpp -I/my_include_dir/ -L/my_lib_dir/ -lSDL_image -lSDL_ttf -lSDL_mixer -lSDL -lpthread -ldl -lfreetype -lz -Wl,-rpath,. -o build/tictactoe32 -m32
Useful commands:
Check which libraries will be loaded by the executable at runtime:
ldd <binary>
Check which directories will be searched for libraries:
readelf -d <binary> | grep RPATH
Sources:
http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
http://www.eyrie.org/~eagle/notes/rpath.html
http://www.techytalk.info/c-cplusplus-library-programming-on-linux-part-one-static-libraries/ (3 parts)
in terminal: man ld
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement