| 1 |
<html lang="en"> |
|---|
| 2 |
<head> |
|---|
| 3 |
<title>Terminology</title> |
|---|
| 4 |
<link rel="stylesheet" type="text/css" href="styles.css"> |
|---|
| 5 |
</head> |
|---|
| 6 |
<body> |
|---|
| 7 |
<hr> |
|---|
| 8 |
<hr> |
|---|
| 9 |
<h2 align="center">Terminology</h2> |
|---|
| 10 |
<hr> |
|---|
| 11 |
<hr> |
|---|
| 12 |
|
|---|
| 13 |
<h3>Introduction</h3> |
|---|
| 14 |
When discussing Derelict in the |
|---|
| 15 |
<a href="http://www.dsource.org/forums/viewforum.php?f=19&sid=d6f86cfb804d7c8727af1f58cd327d2c">project forums</a> |
|---|
| 16 |
or elsewhere, it is important to understand the terminology that often surfaces |
|---|
| 17 |
in such discussions. This will also be helpful in better understanding the Derelict |
|---|
| 18 |
documentation. Following is a list of terms which could potentially be misunderstood |
|---|
| 19 |
and their meaning when used in relation to Derelict. |
|---|
| 20 |
|
|---|
| 21 |
<h4>Shared Library</h4> |
|---|
| 22 |
This term is a platform-agnostic way of describing a library which is dynamically |
|---|
| 23 |
loaded at run time and can be used simultaneously by multiple programs. On Windows, |
|---|
| 24 |
such libraries are referred to as "Dynamic Link Libraries", or "DLLs", and have |
|---|
| 25 |
the .dll file extension. On Linux and other Unix-like platforms, such libraries |
|---|
| 26 |
are referred to as "Shared Object Libraries" or "Shared Objects" and have the |
|---|
| 27 |
file extension of .so. This also includes the "Frameworks" found on Mac. |
|---|
| 28 |
|
|---|
| 29 |
<p> |
|---|
| 30 |
When this term is used in relation to Derelict, it can be considered to refer to |
|---|
| 31 |
any of the above library formats. When you need to refer to a specific |
|---|
| 32 |
format, you should use the format name instead of the term "Shared Library". |
|---|
| 33 |
</p> |
|---|
| 34 |
|
|---|
| 35 |
<h4>Static Libraries</h4> |
|---|
| 36 |
Static libraries are the traditional form of distribution for archived object |
|---|
| 37 |
files. On Windows, such libraries are called "Libraries" and have the extension |
|---|
| 38 |
.lib. On Linux and other Unix-like platforms, such libraries are called "object |
|---|
| 39 |
archives", "archives", "libraries", and several other terms, all of which have |
|---|
| 40 |
the file extension .a and usually have the prefix "lib" prepended to the file |
|---|
| 41 |
name. |
|---|
| 42 |
|
|---|
| 43 |
<p> |
|---|
| 44 |
Static libraries are compiled into the application at compile time, rather |
|---|
| 45 |
than being loaded at run time. Because the library is compiled into the executable, |
|---|
| 46 |
no other executable can share the same compilation. |
|---|
| 47 |
</p> |
|---|
| 48 |
|
|---|
| 49 |
<h4>Import Libraries, or Static Import Libraries</h4> |
|---|
| 50 |
An import library is a library which automates the process of loading a shared |
|---|
| 51 |
library. On Windows, when you create a DLL most compilers also create a static |
|---|
| 52 |
library by the same name. This library is the DLL's import library. By compiling |
|---|
| 53 |
this library into your executable, the application will be bound to the DLL and |
|---|
| 54 |
the DLL will be loaded at run time by the OS. |
|---|
| 55 |
<p> |
|---|
| 56 |
Linux and other Unix-like platforms handle this differently. Rather than link |
|---|
| 57 |
to a separate, static import library, you link to the .so itself. In otherwords, |
|---|
| 58 |
the .so doubles as a shared library and as an import library. Even though you |
|---|
| 59 |
are linking to the .so at compile time, the library itself is still loaded at |
|---|
| 60 |
run time. |
|---|
| 61 |
</p> |
|---|
| 62 |
|
|---|
| 63 |
<h4>Dynamic Linkage</h4> |
|---|
| 64 |
The term "dynamic linkage" usually refers to linking with an import library. As |
|---|
| 65 |
described above, the import library may be a static library (as on Windows), or |
|---|
| 66 |
may be the shared library itself (as on Linux). |
|---|
| 67 |
|
|---|
| 68 |
<h4>Static Linkage</h4> |
|---|
| 69 |
The term "static linkage" refers to linking with a static library at compilation |
|---|
| 70 |
time: .lib on Windows and .a on Linux. Technically speaking, an import library |
|---|
| 71 |
on Windows must be "statically linked", but the term is normally not applied to |
|---|
| 72 |
import libraries. |
|---|
| 73 |
|
|---|
| 74 |
<h4>Dynamic Loading</h4> |
|---|
| 75 |
In the context of Derelict, "dynamic loading" refers to the normal method of |
|---|
| 76 |
loading a shared library at run time: you link with an import library and the |
|---|
| 77 |
operating system loads the library when the application starts. You, as the |
|---|
| 78 |
programmer, need do nothing programmatically to load the shared library. |
|---|
| 79 |
|
|---|
| 80 |
<h4>Manual Loading</h4> |
|---|
| 81 |
In the context of Derelict, "manual loading" refers to bypassing the normal |
|---|
| 82 |
method of loading a shared library at run time: you do not link with an import |
|---|
| 83 |
library and, instead, load the shared library programmatically through |
|---|
| 84 |
operating system API calls. This is Derelict's mode of operation and is the |
|---|
| 85 |
reason why you must call methods like Derelict*.load(). |
|---|
| 86 |
</body> |
|---|
| 87 |
</html> |
|---|