Http://topic.csdn.net/u/20090911/11/af6252d7-961e-4e19-bb3d-4d4d686ce2f7.html
Http://blog.csdn.net/shycoffee/article/details/4095810
Http://blog.163.com/guyot/blog/static/120574021200911494028692/
Http://blog.csdn.net/rangf/article/details/6977873
Http://baike.baidu.com/view/1393751.htm
Http://blog.csdn.net/xietao1233/article/details/6644807
Http://zhidao.baidu.com/question/19910786.html
Http://baike.baidu.com/view/945740.htm
Http://baike.baidu.com/view/226876.htm#4
Http://www.ibm.com/developerworks/cn/linux/l-dynamic-libraries/
Http://www.cnblogs.com/feisky/archive/2010/03/09/1681996.html !!!
Http://wenku.baidu.com/view/a059f5e49b89680203d825c6.html
Http://www.vbgood.com/thread-98646-1-1.html
Http://blog.csdn.net/shycoffee/article/details/4095810
Editor-Preprocessor-compiler-Assembler-linker
The pre-processor processes related pre-processing commands, generally starting. For example: # include "XX. H" # define;
The compiler translates *. cpp into a *. s file (assembly language ). The assembler processes *. s to generate the corresponding *. o file (OBJ target file );
Finally, the linker links all *. O files into an executable file (*. EXE ).
Http://topic.csdn.net/u/20090911/11/af6252d7-961e-4e19-bb3d-4d4d686ce2f7.html
Edit: write a program in IDE
Preprocessing: loading header files and replacing macros with # symbols
Compile: Convert the. C or. cpp source file to the. s Assembly file and then convert it to The. O (. OBJ) target file (Binary) through the assembler)
Link: link Multiple. OSS files and a few files to form an executable file (.exe). There are three types of links: static links and dynamic links during loading.
Dynamic Link during connection and running. See http://wenku.baidu.com/view/0a8cbf5177232f60ddcca1e0.html
Run: load the memory, obtain CPU control, and execute local variables are the storage space allocated to the stack when the program is running. For example, one of my AA. MySQL configuration files stores database account and password information. Program to save the information in local variables. After compilation, run. When I change the database password, you only need to change the configuration file (you can directly run it without re-Compiling ). It is not to say that the header file is loaded during preprocessing. Now the configuration file has been changed and the file is compiled after preprocessing. Why can the program run correctly without re-compiling (using the changed Database Password) what about it? My simple understanding is that the configuration file is different from the header file: the header file has determined its content before compilation. Even if the header file is modified, it will not take effect if it is not re-compiled. However, the configuration file is dynamically loaded during execution, so the configuration file can take effect without re-compilation.
Note: There are two types of connections: static connections and dynamic connections. Static connections are loaded into the memory during connection, the dynamic connection is loaded into the memory when the program is executed (that is, when the function is called), so it can be said that the dynamic connection can save the memory overhead.
Http://blog.csdn.net/xietao1233/article/details/6644807
Use assembler to "determine whether a string is a return" (NASM)
Where will llvm/clang take FreeBSD?
See: http://www.linuxsir.org/bbs/showthread.php? T = 353921
Http://qikee.blogbus.com/logs/113687683.html
Llvm/Clang is a compiler. llvm is something similar to a virtual machine (www.llvm.org). This virtual machine is not a Java or Python VM. The purpose of llvm is not to run but to compile and generate code. That is to say, this llvm is the back-end of the compiler. Clang, (clang.llvm.org) is simply the front end of llvm, a C language family. Its responsibility is to translate the C language into intermediate code recognized by llvm, then, the compilation code of the specific architecture is generated by the llvm backend. Finally, the assembler and connector in the system generate the executable files under a certain architecture. Isn't all compilers in this way? It is divided into front-end backend, code generation, and code optimization,
What is the difference between llvm? The most important thing is that llvm provides a function library and a set of well-defined interfaces, which makes the front-end design of the compiler Quite dumb. We can write a front-end of llvm for Perl, which can compile and run the binary code at a cost. It can compile a front-end for python. Do not think how complicated the front-end is. It is not very difficult to use llvm's reasonable interface. So in general, the llvm/clang architecture is better than the GCC architecture (in fact, writing a GCC language front-end is not a big deal, but you must understand the internal mechanisms and details of GCC, it cannot call several library functions like llvm to handle the problem .), FreeBSD is ready to migrate
Llvm/clang. How is it possible? Don't be naive. It is not easy to migrate a large operating system to another development compiler. The reason for this is that GNU has changed the GCC developed in the future to gplv3, And the BSD has never caught a cold on GPL, this V3 affects the core interests of companies that use FreeBSD for business operations.
If you want to completely break away from the GNU Compiler family in recent years, it is unlikely. Llvm/Clang is a C/C ++ compiler. Finally, you must use the assembler and connector in the system to generate executable files. In FreeBSD, these as and LD can be GNU. Although BSD's binutils has been developed for a long time, apart from the Development of AR, nm and other things, As and LD are estimated to be eight characters missing a glimpse. Of course, I also understand that some applications are used first. Why re-build the wheel for licence? It is estimated that the llvm project will come out as if it is called "MC" (which is also played by people on the mailling list). As for linker, although it is not a complicated software, it is estimated that the linker of BSD will be visible only after GNU turns its LD into gplv3.