C++编译连接总结(一)--g++

来源:互联网 发布:如何建立大数据平台 编辑:程序博客网 时间:2024/06/01 10:21

快速入门例子

g++ –c a.cpp  编译文件,生成目标文件 a.o

g++ a.o –o abc  连接 并重命名为可执行文件 abc

(g++ -c a.cpp -o a  之后 g++ a 会保存的,亲验)

g++ a.cpp    编译连接一起,生成a.out

g++ a.cpp –o hello 生成a.out并命名为hello

涉及静态动态库的后面说


详细说明
-c:

编译或汇编源文件,但不作连接.

编译器输出对应于源文件的目标文件.

缺省情况下, G++通过用.o替换源文件名后缀产生目标文件名. 可以使用-o选项选择其他名字

样例: 

g++ -c a.cpp     输出文件 a.o

g++ -c a.cpp -o a   输出文件 a

-o xxx:
指定输出文件为xxx.  该选项不在乎G++产生什么输出,无论是可执行文件,目标文件,汇编文件还是预处理后的C代码.
如果没有使用-o选项默认的输出结果是:

   1. 可执行文件为a.out

   2. source.suffix的目标文件是source.o

   3. 汇编文件是 source.s

   4. 而预处理后的C源代码送往标准输出.

样例:
g++ -c a.cpp -o a   输出文件 a

-Wall   (同-W)
输出所有编译警告信息, 建议一定要加上
 g++ a.cpp -W

比如在main中输出一个没有初始化的变量
a.cpp: In function ‘int main()’:
a.cpp:7:13: warning: ‘a’ is used uninitialized in this function [-Wuninitialized]
 std::cout<<a<<endl;
-Dxxx=xxx

定义宏,类似于#define功能

 样例:  g++ a.cpp -Db=10   #define b 10

-L xxx

在库文件的搜索路径列表中添加dir 目录.,可添加多个

gcc -o hello2 m.cpp  -L ./1 -L . -lmyhello2   -Wl,--rpath=./1

-llibrarytest(小写的L)
1.

2. 连接器在标准搜索目录中寻找这个库文件,库文件的真正名字是lib librarytest(动态库)   lib librarytest(静态库)

3. 是按严格文件名搜索 ,如果so文件名带版本号,需要创建软连接

4. 编译时搜索目录包括 :

      1. 用户以`-L'选项指定的路径   

      2.LIBRARY_PATH  (  是环境变量用于在程序编译期间查找动态链接库时指定查找共享库的路径

      3. 系统目录  /lib  /usr/lib

5. 运行时搜索目录包括 :

      1.LD_LIBRARY_PATH(用于在程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径

      2.ld.so.cache &/etc/ld.so.conf

      3.系统目录  /lib  /usr/lib

6.动态库和静态库同名时,优先使用动态库


-Idir ( 大写的i  )
在头文件的搜索路径列表中添加dir 目录.

-shared

 生成一个共享库文件

g++ -shared -o libtest.sobdb.o

-fPIC

编译器生成位置无关目标码,适用于动态连接(dynamic linking)



0 0