目录
即看即用
多个源文件/目标生成动态库
a.
gcc -fPIC -shared xxx1.c xxx2.c xxx3.c -o libxxx.so
b.
gcc -fPIC -shared xxx1.o xxx2.o xxx3.o -o libxxx.so
2.多个源文件/目标生成静态库
a.
ar -rc libxxx.a xxx1.o xxx2.o xxx3.o (正确方法)
b.
ar -rc libxxx.a xxx1.c xxx2.c xxx3.c (静态库可以生成;当运行连接了该静态库的可执行程序会报错:could not read symbols:Archive has no index;run ranlib to add one)
链接静态库
gcc -o main2 main.o -L./ -ladd_minus
链接动态库
- 在外部告诉程序,动态库在哪里
有两种方法:
- 将 libmulti_div.so copy到/lib/ 或 /usr/lib/ 下
这个方法对很多软件都要使用的库比较友好 - 在 LD_LIBRARY_PATH 变量中指定库文件路径
这个一般就是临时弄一下。用法:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/yourpath
- 编译链接
gcc -o main4 main.o -L./ -ladd_minus -lmulti_div
一、GCC 简介
《gcc命令》http://man.linuxde.net/gcc
gcc作为编译工具,用在Linux操作系统中,可以编译C、C++、Object-C、JAVA等语言。编译过程中可以带编译选项,选择编译过程。
GCC编译流程
1)预处理 Pre-Processing
2)编译 Compiling
3)汇编 Assembling
4)链接 Linking
GCC编译选项
1、一般选项
1) -c :只编译,不链接,生成目标文件“.o”。
2) -S :只编译,不汇编,生成汇编代码“.S”。
3) -E :只进行预编译/预处理,不做其他处理。
4) -o file:输出文件名为file
5) -g :在可执行程序中包含标准调试信息。
6) -v :打印出编译器内部编译各过程的命令行信息和编译器的版本。
7) -I dir :在头文件的搜索路径列表中添加dir目录
8) -L dir :在库文件的搜索路径列表中添加dir目录
9) -static :连接静态库(静态库也可以用动态库链接方式链接)
10) -llibrary :连接名为library的库文件(显示指定需要链接的动态库文件)
-shared 该选项指定生成动态连接库l -fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真 正代码段共享的目的。l -ltest:编译器查找动态连接库时有隐含的命名规则,即在