2
\$\begingroup\$

I'm considering making a 2D game with C++ and raylib, targeting windows desktop. One of the attractive features of that framework is that it has "no external dependencies".

However, now that I've set it up and started coding and compiling, I see that the linker requires "-lraylib -lopengl32 -lgdi32 -lwinmm".

So those last three...aren't those external dependencies? If not then what are they really? Do they go by some other terminology?

\$\endgroup\$

2 Answers 2

5
\$\begingroup\$

I suppose that when they say "no external dependencies", they actually mean "you won't have to run around the internet downloading, installing and maintaining maybe-not-so-up-to-date esoteric packages", because

  • assuming raylib is not a header-only library, linking with raylib is the compiled functions/classes of raylib
  • winmm "winmm.dll is a module for the Windows Multimedia API, which contains low-level audio and joystick functions. winmm.dll is a system process that is needed for your PC to work properly. It should not be removed." (source)
  • gdi32 "exports Graphics Device Interface (GDI) functions that perform primitive drawing functions for output to video displays and printers. It is used, for example, in the XP version of Paint. Applications call GDI functions directly to perform low-level drawing (line, rectangle, ellipse), text output, font management, and similar functions." (source)
  • opengl32 This is the interface between applications and the graphics card. Windows will typically supply a basic version, allowing the apps to run, then the graphics card vendors will supply another one to adapt the OpenGL API to how their card actually works.

So, although you do need to link against some libraries, you'll only have to download raylib's since the other three are already installed on your computer.

I suppose they could have made it so that they would search for the DLL at run time, without the need to use the (windows) .libs at link time, but it requires a setup a bit more complicated (AFAIK).

\$\endgroup\$
1
\$\begingroup\$

They tell you what they mean, the website says this:

NO external dependencies, all required libraries included with raylib

\$\endgroup\$
1
  • \$\begingroup\$ But that’s clearly not entirely true as it requires other libraries; just not ones you download. Maybe they meant that you wouldn’t need to download other libraries? The wording is bad. \$\endgroup\$
    – Cole Tobin
    Commented Jun 14, 2023 at 20:21

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .