粗略看完了第七章:链接。
回想起, 去年安装tokyocabinet后。
gcc -I/usr/local/include tc_example.c -o tc_example /
> -L/usr/local/lib -ltokyocabinet -lz -lbz2 -lrt -lpthread -lm -lc
gcc编译tc_example.c成功后, 通过./tc_example运行,出现以下错误:
./tc_example: error while loading shared libraries: libtokyocabinet.so.8: cannot open shared object file: No such file or directory
湛哥教我配ld、ldd,配置完成后。./tc_example能正确调用libtokyocabinet的共享目标(动态链接库), 运行正常。
gcc/g++在执行编译工作的时候,总共需要4步 参见:http://www.linuxsky.org/doc/dev/200905/362.html
-S 只激活预处理和编译,就是指把文件编译成为汇编代码
-c 只激活预处理,编译,和汇编,也就是他只把程序做成obj文件
-v选项的输出内容, gcc swap.c main.c -o main -v
包含了执行编译的整个过程, --Source--> Pre processor(cpp) --Modifyed Source--> Compiler(cc1) --Assermbly--> Assembler(as) --Relocatable object--> Linker(ld) --Executable object-->
标记一下, 所以直接引用csapp书中内容了:
Tools for Manipulating Object Files
There are a number of tools available on Unix systems to help you understand and manipulate object files.
In particular, the GNU binutils package is especially helpful and runs on every Unix platform.
AR: Creates static libraries, and inserts, deletes, lists, and extracts members.
STRINGS: Lists all of the printable strings contained in an object file.
STRIP: Deletes symbol table information from an object file.
NM: Lists the symbols defined in the symbol table of an object file.
SIZE: Lists the names and sizes of the sections in an object file.
READELF: Displays the complete structure of an object file, including all of the information encoded in the
ELF header. Subsumes the functionality of SIZE and NM.
OBJDUMP: The mother of all binary tools. Can display all of the information in an object file. Its most
useful function is disassembling the binary instructions in the .text section.
Unix systems also provide the ldd program for manipulating shared libraries:
LDD: Lists the shared libraries that an executable needs at run time.