加载中…
正文 字体大小:

linux 编译相关命令

(2012-09-16 23:17:02)
标签:

杂谈

分类: linux

cc:   cc和gcc 命令应该是差不多的。 

无参数,

 cc helloworld.c  直接生成helloworld.exe(执行程序,名称可能不一样)

-c,生成.o目标文件。生成动态库和静态库都需要这个.o 文件

cc -c helloworld.c  生成 helloworld.o目标文件 

-o, 小写o,指定生成出来的文件的名字。这个文件根据命令不同,可能是.o .so 执行程序

cc -o a.exe helloworld.c 生成一个a.exe的执行程序。(注:顺序可以打乱,

如 cc helloworld.c -o a.exe

-shared 生成动态库.so用的

cc -shared -o libtest.so test.o -Wl,-soname,libtest.so,--kill-at 

生成一个libtest.so的动态库

-Wl 使用cc --help可以看到该命令说明,

-Wl,-soname,libtest.so 是指定动态库的soname名字。对于.so动态库在名字上有一些规则。

简单来说就是2个名字,一个适用于代码使用时的简单名字,即soname,一个是用于版本更新控制的名字,形如libtest.so.1.0.1。mark:qs 那-o指定的是什名字。。。

--kill-at 在java加载.so之后,报调用方法错误,或者方法未找到之类的。这时加上这个参数。效果是。。。使用dllexp等动态库查看器,可以看到 没使用时动态库的方法名字是 testfunc@8 ,加了之后是 testfunc。 少了个@符号,之后再调用.so就不会报错了

-static选项,强制使用静态链接库

如果在/home/xiaowp/lib/目录下有链接时所需要的库文件libfoo.so和libfoo.a  为了让Linux GCC在链接时只用到静态链接库,可以使用下面的命令:

cc -o test test.c -L /home/xiaowp/lib -static -lfoo

-O选项,用于优化。可以告诉Linux GCC同时减小代码的长度和执行时间,其效果等价于-O1。

在这一级别上能够进行的优化类型虽然取决于目标处理器,但一般都会包括线程跳转(Thread Jump)和延迟退栈(Deferred Stack Pops)两种优化。

选项-O2告诉Linux GCC除了完成所有-O1级别的优化之外,同时还要进行一些额外的调整工作,如处理器指令调度等。

选项-O3则除了完成所有-O2级别的优化之外,还包括循环展开和其它一些与处理器特性相关的优化工作。

通常来说,数字越大优化的等级越高,同时也就意味着程序的运行速度越快。以上是Linux GCC系统命令。


ldd:

ldd XXX.so  可以知道XXX.so依赖的库文件。这些库文件在调用XXX.so文件时都是需要导入的。


其他的 -D -L -l -I 参考:http://www.cppblog.com/prayer/archive/2008/09/10/61450.html

0

阅读 评论 收藏 转载 喜欢 打印举报
前一篇:JNI,java and C
后一篇:任务列表.list
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

    < 前一篇JNI,java and C
    后一篇 >任务列表.list
      

    新浪BLOG意见反馈留言板 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有