Object files are almost full executables. They contain machine code, but that code still requires a relocation step. It also contains metadata about the addresses of its variables and functions (called symbols) in an associative data structure called a symbol table.
An object file is a computer file containing object code, that is, machine code output of an assembler or compiler. The object code is usually relocatable, and not usually directly executable. There are various formats for object files, and the same machine code can be packaged in different object file formats.
There are three main types of object files: A relocatable file holds sections containing code and data. These files are suitable to be linked with other object files to create executable files, shared object files, or another relocatable object. An executable file holds a program that is ready to execute.
I've turned a couple of resource files into .obj files using objcopy
and i link them with my programs source code.
I can very well access the symbols inside the object file in my program with the following code, but only with GCC/G++ (Cygwin):
extern uint8_t data[] asm("_binary_Resources_0_png_start");
extern uint8_t size[] asm("_binary_Resources_0_png_size");
extern uint8_t end[] asm("_binary_Resources_0_png_end");
The code doesn't work in Visual Studio, probably because VS has it's own __asm
command.
I want to include my programs resources (Images, Shaders, etc.) in my final executable's .data
section through linking them.
But how can i access the symbols defined in the object file in VC++?
I tried extern uint8_t _binary_Resources_0_png_start[]
or extern "C" uint8_t _binary_Resources_0_png_start[]
without the assembly command, but i get unresolved symbol link errors.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With