linux如何用gcc编译java,GCC在Linux编译时的简单用法

1.单个文件编译

编写源文件hello.c

编译:gcc hello.c

生成a.out

指定生成文件名:gcc -o test  hello.c

生成test

2.编译成目标文件

编译:gcc  -c  hello.c

生成:hello.o

指定生成文件名:gcc -c  -o test.o hello.c

编译:gcc -c file1.c file2.c file3.c

生成:file1.o file2.o  file3.o

3.多文件编译

编写计算字符串长度函数string.c如下:

#define ENDSTRING '\0'

int StrLen(char *string)

{

int len=0;

while(*string++ != ENDSTRING)

len++;

return len;

}

编写主函数main.c 如下:

#include

extern int StrLen(char* str);

int mian(void)

{

char src[]="Hello Dymatic";

printf("string length is: %d\n",StrLen(src));

return 0;

}

编译:gcc -o test  string.c main.c

生成:test

执行结果:string length is: 13

也可先生成目标文件:gcc -c string.c main.c

编译:gcc -o test string.o main.o

4.预编译处理

使用gcc的 -E选项告诉编译器进行预编译操作。

编译:gcc -E string.c

生成:string.i

查看:cat  string.i

结果如下:

# 1 "string.c"

# 1 ""

# 1 ""

# 1 "string.c"

int StrLen(char *string)

{

int len=0;

while(*string++ != '\0')

len++;

return len;

}

可以发现ENDSTRING已经被'\0'替换。

5.编译成汇编语言

编译:gcc -S  string.c

生成:string.s

查看结果:cat string.s

如下:

.file "string.c"

.text

.globl StrLen

.type StrLen, @function

StrLen:

pushl %ebp

movl %esp, %ebp

subl $16, %esp

movl $0, -4(%ebp)

jmp .L2

.L3:

addl $1, -4(%ebp)

.L2:

movl 8(%ebp), %eax

movzbl (%eax), %eax

testb %al, %al

setne %al

addl $1, 8(%ebp)

testb %al, %al

jne .L3

movl -4(%ebp), %eax

leave

ret

.size StrLen, .-StrLen

.ident "GCC: (GNU) 4.2.1"

.section .note.GNU-stack,"",@progbits

6.生成和使用静态链接库

生成静态库或者将一个obj文件加到已经存在的静态库的命令为" ar  库文件  obj1   obj2"。

将上面的string.o打包成库libstr.a命令如下:

ar  -rcs libstr.a  string.o

使用静态库如下:

gcc  -o  test  main.c  libstr.a  或  gcc -o test  main.c  lstr

应该你的运行会报错,没有找到lstr库,所以应该如下使用:

gcc  -o test main.c  -L ./  lstr  //手动指定lstr库的位置。

7.生成和使用动态链接库

编译:gcc -shared  -Wl,-soname,libstr.so -o libstr.so.1 string.c

选项中的soname表示别名为libstr.so,-o libstr.so.1表示实际名称为libstr.so.1,-shared表示生成ige动态链接库。

动态链接库的配置

动态链接库的搜索路径配置文件 : /etc/ld.so.conf

这个目录下存放可被linux共享的动态链接库所在目录名字,多个目录名间以空格 换行等空白字符 或是冒号或逗号隔开。

动态链接库管理命令:ldconfig

ldconfig的作用是在系统默认搜索路径,和动态链接库配置文件中所列出的目录里搜索动态链接库,创建动态链接装入程序需要的链接和缓存文件。搜索完毕将结果写入缓存文件/etc/ld.so.cache中,文件中保存的是已经安排好的动态链接库名字列表。

ldconfig -p   //列出当前系统中的动态链接库

ldconfig -v  //将扫描的动态链接库信息输出到终端

ldconfig  目录名  //将指定目录中的动态链接库放入系统中进行共享

使用动态链接库

编译:gcc -o test main.c  -L./  -lstr

可能你的系统中test会报错,no such file or directory

程序编译时链接动态链接库和运行时使用动态链接库的概念不同。

运行时程序链接动态链接库需要在系统目录下才行。

有几种方法可解决此问题:

1.将动态链接库的目录放到程序搜索路径中,可加到环境变量LD_LIBARAY_PATH中实现。

LD_LIBARAY_PATH= /mydir: $LD_LIBARAY_PATH0b1331709591d260c1c78e86d0c51c18.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值