Allegro.cc - Online Community

Allegro.cc Forums » Installation, Setup & Configuration » Step by step guide for installing static binaries

Credits go to SiegeLord for helping out!
This thread is locked; no one can reply to it. rss feed Print
Step by step guide for installing static binaries
Johan Halmén
Member #1,550
September 2001

Many of us seem to struggle with getting A5 to work. I have a new machine and have big difficulties in getting the right libraries working. Before I tell about my lousy attempts, I want to know if there are any guides about how to install A5 on Code:;Blocks and Mingw. The newest binaries of A5 and dependencies seem to have a bit differing file list from those explained on the Wiki here:
https://wiki.allegro.cc/index.php?title=Windows,_Code::Blocks_and_Allegro_5

I have Code::Blocks 16.01, Mingw 6.2.0, 64 bit Windows. I've downloaded allegro-mingw-gcc6.2.0-x64-static-5.2.2

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Years of thorough research have revealed that the red "x" that closes a window, really isn't red, but white on red background.

Years of thorough research have revealed that what people find beautiful about the Mandelbrot set is not the set itself, but all the rest.

SiegeLord
Member #7,827
October 2006
avatar

There are no up-to-date guides for MinGW, as far as I know. I'm guessing the issue most people run into is that they don't match the mingw distro/version with the ones in the binaries... there's like 3 types of MinGWs out there, and they keep changing gcc versions every few months as well. I'm guessing the main issue, however, is matching the exception handling mechanism and the threads which are the common differences between MinGWs.

Embarrassingly, I don't know which ones the binaries use (it's whatever the default is for MSYS2).

"For in much wisdom is much grief: and he that increases knowledge increases sorrow."-Ecclesiastes 1:18
[SiegeLord's Abode][Codes]:[DAllegro5]:[RustAllegro]

Johan Halmén
Member #1,550
September 2001

As I wrote, I downloaded allegro-mingw-gcc6.2.0-x64-static-5.2.2.
And "C:\gcc --version" tells me that Mingw is 6.2.0.:

C:\Users\admin_johha>gcc --version gcc (x86_64-win32-sjlj-rev1, Built by MinGW-W64 project) 6.2.0 Copyright (C) 2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

C:\Users\admin_johha>g++ --version g++ (x86_64-win32-sjlj-rev1, Built by MinGW-W64 project) 6.2.0 Copyright (C) 2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Could the "sjlj-rev1" thing be the problem? If so, where is that explained?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Years of thorough research have revealed that the red "x" that closes a window, really isn't red, but white on red background.

Years of thorough research have revealed that what people find beautiful about the Mandelbrot set is not the set itself, but all the rest.

SiegeLord
Member #7,827
October 2006
avatar

So I looked it up, and the binaries were created with these parameters:

32 bit:

Version: 6.2.0
Exceptions: DWARF
Threads: Posix
Revision: 2

64 bit:

Version: 6.2.0
Exceptions: SEH
Threads: Posix
Revision: 2

Revision is probably unimportant. You, on the other hand have a compiler with these parameters:

64 bit:

Version: 6.2.0
Exceptions: SJLJ
Threads: Win32
Revision: 1

So almost a complete mismatch. I'll include that information in the binary names next time, as it is pretty important...

"For in much wisdom is much grief: and he that increases knowledge increases sorrow."-Ecclesiastes 1:18
[SiegeLord's Abode][Codes]:[DAllegro5]:[RustAllegro]

Johan Halmén
Member #1,550
September 2001

{"name":"930-7c5a556c196d35c3fbb0dc8d0ed66f9b.jpg","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/b\/5\/b515214a9ca423c131664503f2628513.png","w":299,"h":183,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/b\/5\/b515214a9ca423c131664503f2628513"}930-7c5a556c196d35c3fbb0dc8d0ed66f9b.jpg

Now I have a working setup for my Windows 64 with Mingw, c/c++, and Allegro 5.2.2

It was the posix and seh things that was the problem. Though I have a slight clue about what they are, I really missed their importance in choosing the right compiler.

So getting Allegro 5 work on 64 bit for Windows, Code::Blocks and Mingw included the following:

Get the latest Code::Blocks from here: http://www.codeblocks.org/downloads/26
You might want to pick one with Mingw, although it will be the wrong version. But the toolchains will probably be named correctly, even though you switch later to a correct Mingw. I installed Code::Blocks to C:\CodeBlocks\.

Get the right Mingw from this page: https://sourceforge.net/projects/mingw-w64/files/
Scroll down to the sub-header MinGW-W64 GCC-6.2.0, since 6.2.0 is the version that the latest A5 binaries are built with. Pick the x86_64-posix-seh file and open the package with 7-Zip or a similar unzipper.
What I did was I dragged the folder mingw64 from the 7-Zip program window to C:\CodeBlocks\

At this point I checked that Code::Blocks worked with Mingw. In Settings->Compiler settings it should look like this:

{"name":"610796","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/b\/3\/b392312e6daaf159462bb0eba9278221.png","w":794,"h":584,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/b\/3\/b392312e6daaf159462bb0eba9278221"}610796

All the program files should be found in C:\CodeBlocks\mingw64\bin, if you have to pick them at this point. If you installed Code::Blocks with Mingw, there might be an extra Mingw subdirectory in the path.

Next thing was to download the Allegro 5 stuff from here: http://download.gna.org/allegro/allegro-bin/5.2.2/
Pick the file including x64-static in the name. Since it's a .zip, it opens nicely in Windows 7 explorer. Open the include folder and drag the allegro5 folder to C:\CodeBlocks\mingw64\include\ so that allegro5 becomes a sub folder. Open the lib folder and drag all *static.a files into C:\CodeBlocks\mingw64\lib

Next download the Allegro dependencies from here: http://download.gna.org/allegro/allegro-deps/1.5.0/
Pick the file including x64 in the name. Open it like you opened the Allegro stuff. Drag all files inside the lib folder into C:\CodeBlocks\mingw64\lib. You don't need the include folder stuff, since all Allegro stuff is already compiled.

To get an Allegro5 project compiling in Code::Blocks, you now have to include all these libraries. Having your project open, go to Project->Project build options, pick Linker settings tab and add the following libraries from C:\CodeBlocks\mingw64\lib.
All *static.a files except the *debug-static.a files and the *monolith-static.a.[1]
All the dependencies, which are:

libdumb.a
libFLAC.a
libfreetype.a
libjpeg.a
libogg.a
libopus.a
libopusfile.a
libphysfs.a
libpng16.a
libtheoradec.a
libvorbis.a
libvorbisfile.a
libzlib.a

Actually I haven't included all of these. I guess I have to include all the missing ones, if my code requires some of these.

Next set of libraries to be included in the project are in the C:\CodeBlocks\mingw64\x86_64-w64-mingw32\lib folder. There are 15 files. The list I got from this thread. Check code line 34 and further:

libgdiplus.a 
libuuid.a 
libkernel32.a 
libwinmm.a 
libpsapi.a 
libopengl32.a 
libglu32.a 
libuser32.a 
libcomdlg32.a 
libgdi32.a 
libshell32.a 
libole32.a 
libadvapi32.a 
libws2_32.a 
libshlwapi.a 

Finally there are two library files yet to be included:
libstdc++.a
libgcc.a

These two I found in C:\CodeBlocks\mingw64\lib\gcc\x86_64-w64-mingw32\6.2.0
But instead of adding them to this list of link libraries, the standard way is to include them in the Other linker options (to the right) as:
-static-libstdc++
-static-libgcc

Since the order of the linked libraries is important, here's a screenshot of the order. Especially vorbisfile and vorbis have their peculiar place in the list. Don't know if it's important, but that's how it's shown in every previous guide.

{"name":"610797","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/5\/3\/539abf02e668e5d66f25f18766929c1a.png","w":519,"h":649,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/5\/3\/539abf02e668e5d66f25f18766929c1a"}610797

[to be continued...]
The search directories for the compiler and the linker have to be yet set. I have them probably correct, but I won't show them yet, because it might be a bit unorthodox solution. Also all the above might include some details that are not the right way to do it, although it works.

References

  1. All liballeg files can be replaced by the single monolith-static.a file, but I prefered having each one in the list. This will be my A5 template project file and this way I can pick away each library I don't use, to reduce the size of the final single executable file.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Years of thorough research have revealed that the red "x" that closes a window, really isn't red, but white on red background.

Years of thorough research have revealed that what people find beautiful about the Mandelbrot set is not the set itself, but all the rest.

SiegeLord
Member #7,827
October 2006
avatar

Awesome, we should update the wiki once it's stable. I don't think the vorbis and ogg need to be in that exact spot, probably anywhere after the acodec addon should work.

"For in much wisdom is much grief: and he that increases knowledge increases sorrow."-Ecclesiastes 1:18
[SiegeLord's Abode][Codes]:[DAllegro5]:[RustAllegro]

Go to: