2024-04-24 19:04:52 +00:00
|
|
|
#################################### Hello ####################################
|
|
|
|
|
2024-04-24 03:26:45 +00:00
|
|
|
The main goal of this investigation is to organize shared data and code across
|
|
|
|
multiple binary files. This is especially important for something like a base
|
2024-04-24 19:04:52 +00:00
|
|
|
layer that is used in a program that supports hot-reloading and/or plugins.
|
|
|
|
|
|
|
|
This repository contains examples of source and build details needed to achieve
|
|
|
|
dynamic linking (shared data and code) on Windows, and Linux, with the cl, gcc,
|
|
|
|
and clang compilers.
|
|
|
|
|
|
|
|
To start exploring an example navigate into the folder of the example and run
|
|
|
|
the build script from your command line. It should generate an executable in
|
|
|
|
a build/ folder. Each example also has a DETAILS.txt with info about the
|
|
|
|
details that go into the example's structure and the expected output of the
|
|
|
|
example program.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
################################### Topics ####################################
|
|
|
|
|
|
|
|
Looking for a specific topic? This index tells you which example to jump to.
|
|
|
|
|
|
|
|
exporting symbols -> win32_linking, linux_linking
|
|
|
|
load-time import symbols -> win32_linking, linux_linking
|
|
|
|
run-time linking symbols -> win32_linking, linux_linking
|
|
|
|
building a .dll file -> win32_linking
|
|
|
|
building a .so file -> linux_linking
|
|
|
|
module initialization -> win32_before_main, linux_before_main
|
|
|
|
cl build line options -> win32_linking
|
|
|
|
gcc build line options -> linux_linking
|
|
|
|
linux load-time search paths -> linux_linking
|
|
|
|
clang build line options -> clang
|
|
|
|
abstracted base layer -> xlist
|
|
|
|
|
|
|
|
|
2024-04-24 03:26:45 +00:00
|
|
|
|
2024-04-24 19:04:52 +00:00
|
|
|
################################ The Examples #################################
|
2024-04-24 03:26:45 +00:00
|
|
|
|
2024-04-24 19:04:52 +00:00
|
|
|
An explanation of the main ideas in each example.
|
2024-04-24 03:26:45 +00:00
|
|
|
|
2024-04-24 14:31:32 +00:00
|
|
|
*_linking - Concrete examples for each operating system showing how to
|
|
|
|
setup and use various types of dynamic linking. In these
|
|
|
|
the "base" layer uses load-time linking, the "plugin" layer uses
|
|
|
|
run-time linking, and the "main" layer acts as the executable that
|
|
|
|
binds it all together into a process.
|
2024-04-24 13:15:00 +00:00
|
|
|
|
2024-04-24 14:31:32 +00:00
|
|
|
*_before_main - Concrete examples for each operating system showing how to
|
|
|
|
create a function that runs before main.
|
|
|
|
|
|
|
|
clang - Build scripts that build the concrete examples with clang instead of
|
|
|
|
cl or gcc. In each case clang can build the same source. In some cases
|
|
|
|
clang on windows can even build the linux source. The build lines for
|
|
|
|
clang that replace cl require some modification. The build lines for
|
|
|
|
clang that replace gcc have the exact same flags and inputs.
|
2024-04-24 03:26:45 +00:00
|
|
|
|
|
|
|
xlist - My prefered solution to the problem posed in the investigation which
|
2024-04-24 14:31:32 +00:00
|
|
|
relies only on run-time linking & before-main execution. It uses an
|
|
|
|
xlist to manage the maintenance burden of run-time linking, and a
|
|
|
|
basic outline of the abstracted form of the base layer.
|
2024-04-24 03:26:45 +00:00
|
|
|
|
|
|
|
|