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

快速入门例子

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;
- D xxx =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)



  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值