1 , Compile 流程
2,The `##' preprocessing operator performs token pasting
#define myprintf(format, ...) printf (format, ##__VA_ARGS__)
#define myprintf(args...) myprintf (args)
3, Endian
例: mutil-byte number - register 12 34 56 78
big-endian:
the most significant byte has the lowest address
L H
78 56 34 12
little-endian:
bytes at lower addresses have lower significance
L H
12 34 56 78
4, -rpath=dir
Add a directory to the runtime library search path, 当然也可以用 environment variable LD_RUN_PATH
5, Dynamic loading
dlopen() to load a shared library
dlsym() to find the address of a symbol
6, extern "C"
#ifdef __cplusplus
extern “C” {
#endif
……
#ifdef __cplusplus
}
#endif
When you state that a function has extern "C" linkage, the C++ compiler does not add argument/parameter type information to the name used for linkage
7, Optimize level
-O, -O2, -O3, -Os
8, -D<macro>[=<val>]
Define a <macro> with <val> as its value. If just <macro> is given, <val> is taken to be 1
9, Attribute extended by GNU
The keyword __attribute__ allows you to specify special attributes when making a
declaration. This keyword is followed by an attribute specification inside double
parentheses
The following attributes are currently defined for functions on all targets:
aligned, alloc_size, noreturn, returns_twice, noinline, noclone,always_inline, flatten, pure, const, nothrow, sentinel,
format, format_arg, no_instrument_function,no_split_stack, section, constructor, destructor, used, unused,
deprecated, weak,malloc, alias, ifunc, warn_unused_result, nonnull, gnu_inline, externally_visible, hot, cold, artificial, error and warning
10, 一些常用指令
ar: Create, modify, and extract from archives
nm: List symbols from object files
objcopy: Copy and translate object files
objdump: Display information from object files
ranlib: Generate index to archive contents
readelf: Display the contents of ELF format files
size: List section sizes and total size
strings: List printable strings from files
strip: Discard symbols
addr2line: Convert addresses to file and line