GCC
lastmod 2025-02-27created 2014-01-05130 edits
The GNU Compiler Collection (GCC) is a compiler system produced by the GNU Project supporting various programming languages.
Categories
- GCC:Attribute
- GCC:__builtin_expect
- GCC:Optimization: about GCC Optimization.
- GCC:DependencyHeaderFiles: list of dependency files.
- Stack Smashing Protector (SSP)
- libstdc++
- GCC Optimization Option - GCC's optimization options
- gcov - the GNU CC code coverage tool.
- gprof - about the GNU profiler.
- pch - Pre-compiled header
How to install
To install GCC 4.8.2 on CentOS 6:
## Install pre-requirements:
$ yum install gmp-devel mpfr-devel libmpc-devel
## Download and extract gcc 4.8.2 source tar ball:
$ curl -O ftp://ftp.gnu.org/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.gz; tar zxf gcc-4.8.2.tar.gz
$ cd gcc-4.8.2; ./configure --enable-languages=c,c++ --disable-multilib
## Build and install:
$ make; make install
Debian:
RedHat:
in Ubuntu
To install GCC 4.9 on Ubuntu, do the following.
$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test
$ sudo apt-get update
$ sudo apt-get install gcc-4.9
If you want to replace the default gcc command with gcc-4.9, use the alternatives command.
Basic usage
Examples of using GCC.
Compiling. (Outputs an object file.)
Building an executable. (Object files must be given as input.)
Compiling Objective-C source code.
MinGW Static and Dynamic Libraries
Compiling the Static Library
Building the Library.
Referencing the Library.
Compiling the Dynamic Library
Referencing the Library.
Environment Variables
For reference, LD_DEBUG is covered on the GNU C page.
- LD_LIBRARY_PATH
- A collection of directory paths containing linker libraries used by ld.
Library dependency
Libraries have dependency issues. This affects the order of command-line arguments when compiling with gcc.
If the link order gets tangled, do the following.
## -Wl 대신 -Xlinker를 사용해도 된다
g++ main.o -Wl,--start-group {라이브러리 목록} -Wl,--end-group
## 또는 편법적인 방법이지만 두 번 작성해도 된다.
g++ main.o -lcommon -lutil -lmisc -lcommon -lutil -lmisc
Precompiled Headers
- See Precompiled Headers for details.
- [Recommended] Stackoverflow: GCC - Multiple precompiled headers and specific paths 2
Precompiled headers can shorten compile times. To create a PCH file, compile the header file as follows.
Note that if you use the -g flag, you must also use the -g flag when compiling the other source files; likewise, if you don't use it, you must not use it there either.
A filename.h.gch file is then created; add the header file at the top of the source files where you want to apply the PCH. See https://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html for details.
Command-line options
A summary of important Command line options available in GCC.
Common options
-
-c - Compiles only, without the link step.
Outputs an object file.
-
-o<OUTPUT_PATH> - Specifies the output file.
-
-I<INCLUDE_DIR> - An uppercase i; specifies the path of #include headers. There is no space between
-Iand <INCLUDE_DIR>, and it can be used multiple times.
-
-l<LIBRARY_NAME> - A lowercase L; specifies a library to Link.
- Write the library name without the
libprefix and the.a(or*.so) suffix. - There is no space between
-land <INCLUDE_DIR>, and it can be used multiple times. (e.g. to linklibmylib.a, write-lmylib.) - To enter the full path of a library, enter it without
-l, just like Object(*.o) files.
-
-L<LIBRARY_DIR> - Specifies a path containing libraries.
There is no space between-Land <LIBRARY_DIR>, and it can be used multiple times. (e.g.-L.means the current directory.)
-
-p - Links the program so it can be profiled with prof.
-
-w - Suppresses all warning messages.
-
-W - Prints additional warning messages for code that is legal but somewhat ambiguous.
-
-Wall - Prints much more detailed warning messages for ambiguous code.
-
-Werror - Treats all Warnings as Errors. In other words, compilation stops even on a single warning.
-
-Wtraditional - Prints a warning if the source code could produce different results between ANSI C and K&R C.
-
-Wno-psabi - Used to suppress messages such as
note: the mangling of 'va_list' has changed in GCC 4.4. - NOTE: the exact option details need to be looked up.
-
-Wno-wchar-size-warning - Used to suppress messages such as
ld.exe: warning: ~.o uses 2-byte wchar_t yet the output is to use 4-byte wchar_t; use of wchar_t values across objects may fail. - NOTE: the exact option details need to be looked up.
-
-static - Compiles as a static library.
-
-shared - Links with shared libraries where possible, and with static libraries when no shared library is available.
-
-Wl,--subsystem,windows - MINGW: the command-line window and the GUI window do not appear at the same time.
-
-mwindows - Sets MINGW's WinMain as the entry point. Set it as a Linker flag.
- See also: http://blog.jidolstar.com/677|http://blog.jidolstar.com/677
-
-M - Prints a dependency (defendency) list for makefile to stdout.
- Usually redirected into a *.d file and used in a makefile. See Generating Dependencies Automatically for details.
-
-MM - Same as
-M, but omits dependencies on system header files.
-
-H - Prints the full list of header files in use in a Stack format.
-
-std=c++11 - https://gcc.gnu.org/onlinedocs/gcc/Standards.html
- https://gcc.gnu.org/projects/cxx0x.html
- Applies the revised C++ 11 standard (ISO/IEC 14882:2011).
-
--diag_suppress - http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0348bk/CHDHFIAG.html
- This option disables diagnostic messages with the specified tags.
- The
--diag_suppressoption behaves like--diag_errors, except that instead of setting diagnostic messages with the specified tags to error severity, the compiler displays those messages.
-
-save-temps - Store the normally temporary intermediate files(*.s, *.i, *.o) permanently.
Code Generation Conventions
These machine-independent options control the interface conventions used in code generation.
Most of them have both positive and negative forms; the negative form of -ffoo is -fno-foo. In the table below, only one of the forms is listed—the one that is not the default. You can figure out the other form by either removing no- or adding it.
-
-fstack-reuse=reuse-level - This option controls stack space reuse for user declared local/auto variables and compiler generated temporaries.
-
-fdiagnostics-color=auto - How to get color output from GCC
- Applies colors to terminal output.
-
-fpermissive - Downgrade some diagnostics about nonconformant code from errors to warnings. Thus, using
-fpermissivewill allow some nonconforming code to compile. 3 - This problem arises because gcc has tried to follow the standard more strictly since version 4.1, and it is fair to regard it as a kind of bug. :Use the problematic variable explicitly, as in
this->, or include the appropriate header files so the standard headers are found first. (Reportedly, when compiling templates, local lookup happens first.) Use this if you want to solve it with a compiler option. - See also: http://wanochoi.com/?tag=fpermissive
-
-fPIC - Generates large, slow code. Platform-independent. Can be used regardless of CPU. There is no size limit, but in exchange the slowdown in symbol access through the Global Offset Table(GOT) is large. (On i386, though,
-fPICand-fpicare about the same) - See also: Shared Library
- See also: Basic questions about shared libraries
- See also: http://lists.freebsd.org/pipermail/cvs-ports/2004-March/030214.html
-
-fpic - Generates small, fast code. Depending on the CPU, there is a limit on the size of the GOT(Glocal Offset Table) that
-fpiccan generate. Symbols are accessed through the Global Offset Table(GOT), and since there is a machine-specific limit, it may fail in some cases. But when it succeeds, the slowdown is smaller than with-fPIC. - See also: Shared Library
- See also: Creating GCC dynamic libraries (.so) and the difference between -fPIC and -fpic
-
-fvisibility=hidden - glibc - ELF symbol visibility
- See #Symbol Visibility.
- Changes the ELF symbol visibility attribute.
-
-finput-charset= - Character sets - The C Preprocessor
- Stackoverflow - How should I use g++'s -finput-charset compiler option correctly in order to compile a non-UTF-8 source file?
- Specifies the character set of the INPUT source code. To specify utf8, use
-finput-charset=UTF-8.
-
-fmessage-length=n - Sets the number of characters per line to n when printing messages. Setting it to 0 prints the whole message. (Try to format error messages so that they fit on lines of about n characters. default is 72)
-
-fdata-sections,-ffunction-sections - Stackoverflow - How to remove unused C/C++ symbols with GCC and ld?
GCC Optimization
If you don't know which CPU you have or which setting to choose, you can probably just use the -march=native setting. With this flag, GCC detects the processor and sets suitable flags automatically.
| WARNING |
| Do not use the |
CPU-specific flags
Additional --extra-cflags flags per CPU.
- ARM v6
-
-marm -march=armv6
- ARM v7vfpv3
-
-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=armv7-a
- ARM v7vfp
-
-mfloat-abi=softfp -mfpu=vfp -marm -march=armv7-a
- ARM v7n
-
-mfloat-abi=softfp -mfpu=neon -marm -march=armv7-a -mtune=cortex-a8
- ARM v6+vfp
-
-DCMP_HAVE_VFP -mfloat-abi=softfp -mfpu=vfp -marm -march=armv6
Position Independent Code
- Programming Notes: What the PIC option really is
- Stackoverflow - Is there a way to determine that a .a or .so library has been compiled as position indepenent code?
- [Recommended] Position Independent Code (PIC) in shared libraries 6
- Why PIC is used for shared libraries 7
Include directory list
You can check the list of INCLUDE directories as follows.
# C
$ echo | gcc -Wp,-v -x c - -fsyntax-only 2>&1
# C++
$ echo | gcc -Wp,-v -x c++ - -fsyntax-only 2>&1
# more information
$ echo | gcc -E -v -x c++ -
# /dev/null use version:
$ g++ -E -x c++ - -v < /dev/null
# Or in Windows Command Prompt:
$ g++ -E -x c++ - -v < nul
# Clang version:
$ clang++ -E -x c++ - -v < /dev/null
For reference, the default directory list is as follows.
-
/usr/local/include -
libdir/gcc/target/version/include -
/usr/target/include -
/usr/include
Include file list
When checking the dependency list with the -M option or similar, you can print the list with the following command.
Include order
First, the ways to specify header folders are as follows.
-
-I dir -
-iquote dir -
-isystem dir -
-idirafter dir
You can specify any number or combination of these options on the command line to search for header files in several directories. The lookup order is as follows:
- For the quote form of the include directive, the directory of the current file is searched first.
- For the quote form of the include directive, the directories specified by -iquote options are searched in left-to-right order, as they appear on the command line.
- Directories specified with -I options are scanned in left-to-right order.
- Directories specified with -isystem options are scanned in left-to-right order.
- Standard system directories are scanned.
- Directories specified with -idirafter options are scanned in left-to-right order.
Dump preprocessor defines
Yes, use -E -dM options instead of -c. Example (outputs them to stdout):
For C++
From the gcc manual:
Instead of the normal output, generate a list of `#define' directives for all the macros defined during the execution of the preprocessor, including predefined macros. This gives you a way of finding out what is predefined in your version of the preprocessor. Assuming you have no file foo.h, the command
will show all the predefined macros.
If you use -dM without the -E option, -dM is interpreted as a synonym for -fdump-rtl-mach.
sysroot isysroot isystem
-sysroot is used to change the location of the standard C library's header files and libraries. It is usually used for cross-compiling.
With -sysroot=/mips-root, header files and libraries are looked up in /mips-root/usr/include and /mips-root/usr/lib.
-isysroot is used when you want to specify header files separately from libraries. Without this option, -sysroot is followed.
Besides the standard C library header files, /usr/include contains header files for many other libraries. When cross-compiling, it is convenient to gather the related library header files in one place; you could add them to the mips-root/usr/include above, but if you don't want them mixed, use the -isystem option to specify another directory in addition.
The priority for finding header files is as follows.
-
-I -
-isystem -
-sysrootor-isysroot
Disable GCC warnings for a few lines of code
To suppress GCC Warnings in code:
#if defined(__GNUC__) && defined(__cplusplus)
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Winline"
#endif
#include <boost/log/trivial.hpp>
#if defined(__GNUC__) && defined(__cplusplus)
# pragma GCC diagnostic pop
#endif
Symbol Visibility
- Visibility - GCC Wiki - Why is the new C++ visibility support so useful?
- GCC Symbol Visibility Patch
- ned Productions – GCC Symbol Visibility Patch
- (glibc) ELF symbol visibility
The GCC Symbol Visibility Patch, included since GCC 4.0, makes the GCC compiler a bit more useful. The benefits of this feature mentioned on its home page are:
- Dramatically improves the time it takes to load a DSO (Dynamic Shared Object) such as a shared library.
- Lets the compiler optimiser produce better code.
- Reduces DSO size by about 5–20%.
- Lowers the chance of symbol collisions.
The visibility attribute can be set to one of the following four values.
- default: the default. Ignores visibility and uses only whether the symbol (its binding) is global or static (local).
- hidden: the commonly used attribute. Keeps the symbol from being exposed externally.
- protected: rarely used. The symbol is exposed but cannot be overridden by other modules.
- internal: rarely used. The symbol is not exposed, and the effect may differ slightly per architecture.
Exclude unused symbols
- Stackoverflow - When and why would the C linker exclude unused symbols?
- Stackoverflow - How to remove unused C/C++ symbols with GCC and ld?
For GCC, this is accomplished in two stages:
First compile the data but tell the compiler to separate the code into separate sections within the translation unit. This will be done for functions, classes, and external variables by using the following two compiler flags:
Link the translation units together using the linker optimization flag (this causes the linker to discard unreferenced sections):
So if you had one file called test.cpp that had two functions declared in it, but one of them was unused, you could omit the unused one with the following command to gcc(g++):
(Note that -Os is an additional compiler flag that tells GCC to optimize for size)
Tip
With mingw this does not work when linking statically statically libstdc++ and libgcc with the flag -static. The linker option -strip-all helps quite a bit, but still the generated executable (or dll) is about 4 way bigger than what Visual Studio would generate. Point is, I have no control on how libstdc++ was compiled. There should be a ld only option.
Exclude Functions
See the -finstrument-functions-exclude-file-list=file,file,... option or the -finstrument-functions-exclude-function-list=sym,sym,... option.
... In the end, I used strip:
Whole archive
- MSVC: use
link.exewith something like/WHOLEARCHIVE:libA. - Clang: use
-Wl,-force_load,libfoobar.aor-Wl,-all_load. - GCC: add the libraries between the
-Wl,--whole-archiveand-Wl,--no-whole-archiveflags.
Compilation process
- Explanation of the GCC compilation process
- [Recommended] GCC compilation process and options (collection of reposted material)
GCC is not actually the compiler itself; it invokes the various tools needed in the compilation process. So gcc can compile not only C but other languages as well, since it only needs to invoke whatever compiles the other language as part of the process.
Compilation process summary
- Preprocessing
- Compilation into an assembly source file
- Instruction code generation
- Linking
Preprocessing ( ccp0 )
Loads the files included in the source file (#include) and copies and pastes them into the file currently being compiled. (Output: test.i)
Compiling to assembly code (cc1)
This can be called the actual compiler. It goes through lexical analysis -> parsing -> semantic analysis -> intermediate language generation -> code optimization -> object code generation.
- Lexical analysis: splits the test.i file generated by preprocessing into the smallest units with syntactic meaning (tokens).
- Parsing: checks for syntax errors and then builds a parse tree.
- Semantic analysis: checks for semantic rather than syntactic problems, i.e. use of undeclared variables, type mismatches, the number of function arguments, and so on.
- Intermediate language generation: before producing assembly code, generates code in RTL (Register Transfer Language), a language similar to lips, for optimization. (Output: test.rtl)
- Code optimization: optimizes to reduce code size and increase speed. It takes most of gcc's compile time and goes through the two stages below.
- Intermediate code optimization
- Local optimization: optimizations such as strength reduction and constant computation
- Global optimization: removal of unused code
- Loop optimization: removal of unused loops, loop fusion
- Intermediate code optimization
- Uses registers rather than memory as much as possible and optimizes memory access by choosing efficient instructions.
Machine code generation (as)
Converts the .s assembly code into a .o object file. The generated object file follows the ELF(Executable and Linking) binary file structure convention, because linking multiple object files would be impossible if their structures differed. Binary formats such as a.out / ELF / COFF have been used on Unix systems, and today ELF is mostly used. Windows systems use COFF and PE.
- The ELF file structure consists of, from the top, the ELF file header, the program header Table, sections 1 ~ n, and the section header table.
- Everything except the ELF file header may differ per compiled file, and it records instructions, data, the GCC compiler version, and so on.
Linking (collect2)
The process of linking multiple object files into one; this is mainly where libraries get linked.
- Static library: the library is included in the executable at link time. So if other programs use the same library, it is duplicated and takes up a lot of space, but it is fast since linking is already complete.
- Dynamic library (shared library): at link time, only whether the library is included is recorded, and the library is loaded into memory and used at run time. If other programs use the same library, they use the copy already loaded in memory, which is why it is also called a shared library. So as long as even one program uses the library, it stays resident in memory, and when no program uses it, it is removed from memory. Since it is loaded at run time it may be somewhat slower, but memory use is efficient because it is not loaded more than once. (Output: executable).
Common compiler misconceptions
See Compiler#Common compiler misconceptions.
Debugging symbols
- Stackoverflow - Is a program compiled with -g gcc flag slower than the same program compiled without -g?
- Stackoverflow - gcc -g0 and without the -g option
Using -g on the command line adds debugging symbols. You can check the sections with objdump.
You can check as follows.
It includes content like the following.
25 .debug_aranges 00000030 0000000000000000 0000000000000000 00003042 2**0
26 .debug_info 000000c4 0000000000000000 0000000000000000 00003072 2**0
27 .debug_abbrev 00000071 0000000000000000 0000000000000000 00003136 2**0
28 .debug_line 0000004c 0000000000000000 0000000000000000 000031a7 2**0
29 .debug_str 0000009f 0000000000000000 0000000000000000 000031f3 2**0
0000000000000000 l d .debug_aranges 0000000000000000 .debug_aranges
0000000000000000 l d .debug_info 0000000000000000 .debug_info
0000000000000000 l d .debug_abbrev 0000000000000000 .debug_abbrev
0000000000000000 l d .debug_line 0000000000000000 .debug_line
0000000000000000 l d .debug_str 0000000000000000 .debug_str
-
-g0adds no debugging symbols. It is the same as not adding-gto the command line. - If you use the
-g0and-goptions together, the option entered last on the command line takes effect.
Separating debug symbols from the target
You need to use objcopy to separate the debug information:
objcopy --only-keep-debug "${tostripfile}" "${debugdir}/${debugfile}"
strip --strip-debug --strip-unneeded "${tostripfile}"
objcopy --add-gnu-debuglink="${debugdir}/${debugfile}" "${tostripfile}"
I use the bash script below to separate the debug information into files with a .debug extension in a .debug directory. This way I can tar the libraries and executables in one tar file and the .debug directories in another. If I want to add the debug info later on I simply extract the debug tar file and voila I have symbolic debug information.
This is the bash script:
#!/bin/bash
scriptdir=`dirname ${0}`
scriptdir=`(cd ${scriptdir}; pwd)`
scriptname=`basename ${0}`
set -e
function errorexit()
{
errorcode=${1}
shift
echo $@
exit ${errorcode}
}
function usage()
{
echo "USAGE ${scriptname} <tostrip>"
}
tostripdir=`dirname "$1"`
tostripfile=`basename "$1"`
if [ -z ${tostripfile} ] ; then
usage
errorexit 0 "tostrip must be specified"
fi
cd "${tostripdir}"
debugdir=.debug
debugfile="${tostripfile}.debug"
if [ ! -d "${debugdir}" ] ; then
echo "creating dir ${tostripdir}/${debugdir}"
mkdir -p "${debugdir}"
fi
echo "stripping ${tostripfile}, putting debug info into ${debugfile}"
objcopy --only-keep-debug "${tostripfile}" "${debugdir}/${debugfile}"
strip --strip-debug --strip-unneeded "${tostripfile}"
objcopy --add-gnu-debuglink="${debugdir}/${debugfile}" "${tostripfile}"
chmod -x "${debugdir}/${debugfile}"
License
GCC Runtime Library Exception
- What libraries does the GCC Runtime Library Exception cover?
- The GCC Runtime Library Exception covers any file that has a notice in its license headers stating that the exception applies. This includes libgcc, libstdc++, libfortran, libgomp, libdecnumber, libgcov, and other libraries distributed with GCC.
Troubleshooting
- [Recommended] GCC Warning/Error List (kor) 8
A collection of problems related to using GCC.
ISO C90 forbids mixed declarations and code
If you get the warning above, try moving the variable declarations to the start of the function.
STD C++11 error
When using thread and the like, compilation may fail outright with an error like the following.
In file included from test.cpp:1:0:
C:/root/msys/tdmgcc/lib/gcc/mingw32/4.9.2/include/c++/thread: In function 'bool std::operator<(std::thread::id, std::thread::id)':
C:/root/msys/tdmgcc/lib/gcc/mingw32/4.9.2/include/c++/thread:88:30: error: no match for 'operator<' (operand types are 'std::thread::native_handle_type {aka ptw32_handle_t}' and 'std::thread::native_handle_type {aka ptw32_handle_t}')
{ return __x._M_thread < __y._M_thread; }
In this case, check the 910 CPLUS_INCLUDE_PATH environment variable and remove it if it is set.
In the end it was not an INCLUDE PATH problem; it was a conflict between pthread.h from pthread win32 and mingw/include/pathread.h, which c++11's thread uses internally.
_stricmp c++11 not existent
In c++11, symbols such as _stricmp, _strdup, and _fileno cannot be found. The answer is as follows.
The -std=c++0x option causes g++ to go into 'strict ANSI' mode so it doesn't declare non-standard functions (and _stricmp() is non-standard - it's just a version of strcmp() that's case-insensitive).
Use -std=gnu++0x instead.
LIBRARY_PATH variable error
When installing GCC yourself from source code, the following error may occur at the make step.
checking LIBRARY_PATH variable... contains current directory
configure: error:
*** LIBRARY_PATH shouldn't contain the current directory when
*** building gcc. Please change the environment variable
*** and run configure again.
Apparently, your LIBRARY_PATH ends in a colon:
Get rid of that:
cannot open shared object file
- When Linux says some so file is missing 11
- cannot open shared object file: No such file or directory 12
GLIBCXX not found
After compiling, running the executable may print an error message like the following.
In this case, using -static-libstdc++ in the Linker options may solve it.
If that doesn't fix it, check the LD_LIBRARY_PATH environment variable. On 64bit, a path such as /usr/local/lib64 is sometimes not added.
Undefined reference to ~
If linking a library fails with a message like undefined reference to ~, moving the command-line position of the libraries starting with the -l option may solve it. For example, if you compile with g++ -L. -ltest main.o, changing it to g++ -L. main.o -ltest may make it compile correctly.
DSO missing from command line
DSO here means Dynamic Shared Object; since the error message says it's missing from the command line, I guess you have to add it to the command line.
virtual-move-assign
See C++:Inheritance#virtual-move-assign.
warning: direct access in function
You may get a warning like the following.
ld: warning: direct access in function 'std::__1::basic_filebuf<char, std::__1::char_traits<char> >::open(char const*, unsigned int)' from file '/Path/To/Derived/Data/Xcode/DerivedData/myapp/Build/Intermediates/myapp.build/Debug-iphoneos/myapp.build/Objects-normal/arm64/myapp_lto.o' to global weak symbol 'std::__1::basic_filebuf<char, std::__1::char_traits<char> >::open(char const*, unsigned int)' from file '/Path/To/Derived/Data/Xcode/DerivedData/myapp/Build/Intermediates/myapp.build/Debug-iphoneos/myapp.build/Objects-normal/arm64/myapp_lto.o' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
Use -fvisibility=hidden when compiling.
See also
Favorite site
- GCC web site
- Wikipedia (en) A brief description of GCC
- Using GCC libraries.
- The Linux GCC compiler.
- Naver blog: GCC compilation process and options (ko) 13
- The Linux compilation process, GCC options, and creating libraries 14
- The GNU C Library Reference Manual (ko)
- [Recommended]15 GCC and Make Compiling, Linking and Building C/C++ Applications 16
- How to create so files 17
- [Recommended] Mastering GCC options 18
- [Recommended] gcc compile options (Korean)
GCC Online documentation
References
-
MinGW_Static_and_Dynamic_Libraries_-_CodeProject.pdf ↩
-
GCC_-Multiple_precompiled_headers_and_specific_paths-_Stack_Overflow.pdf ↩
-
http://stackoverflow.com/questions/8843818/what-does-the-fpermissive-flag-do ↩
-
GCC_optimization_-_Gentoo_Wiki.pdf ↩
-
Gcc-march_options.pdf ↩
-
Position_Independent_Code_-PIC-in_shared_libraries-_Eli_Benderskys_website.pdf ↩
-
Pic_option_for_shared_library.pdf ↩
-
GCC_Warning_Error_List-kor.pdf ↩
-
Linux_-_No_such_so_file.pdf ↩
-
Cannot_open_shared_object_file_-_Litcoder.pdf ↩
-
Naver_blog_GCC_Compile_process_and_commandline_options.pdf ↩
-
GCC_Options_and_how_to_create_library.pdf ↩
-
Shows the GCC compilation process and the files it generates. ↩
-
GCC_and_Make_-_A_Tutorial_on_how_to_compile,_link_and_build_C_C++_applications.pdf ↩
-
Create_so_file.pdf ↩
-
Gcc_options.pdf ↩
-
Gcc.4.7.2.zip ↩
- Addr2line
- Aliasing
- Android:NDK:Sample
- Boost
- C++
- C++:Inheritance
- Ccache
- Clang
- CodingGuidelines:C++
- Compiler
- CUDA:Example
- Cython
- Detectron2
- GCC Rust
- GCC: builtin expect
- GCC:Attribute
- GCC:DependencyHeaderFiles
- GCC:Optimization
- Gcov
- GDB
- GDNative
- Glibc
- GNU
- GNU Binutils
- GNU General Public License
- Gprof
- Ld
- Ld:Troubleshooting
- Library
- Linux
- Ltrace
- MinGW
- MMDetection
- Name mangling
- Nm
- Perf
- Precompiled header
- Programming
- Readelf
- Stack Smashing Protector
- Travis CI
- Zig