当前位置: 技术问答>linux和unix
怎么编译执行C程序的细节问题?
来源: 互联网 发布时间:2015-05-10
本文导语: 编译:gcc -o test test.c /*是不是也可以gcc test.c -o test*/ /*生成的test是不是可执行文件?象Windows里的exe?*/ /*为什么没有扩展名呢?没有扩展名,Linux怎么判断它是可执行文件?*/ 运行:./test /*为什么要./test,而不...
编译:gcc -o test test.c
/*是不是也可以gcc test.c -o test*/
/*生成的test是不是可执行文件?象Windows里的exe?*/
/*为什么没有扩展名呢?没有扩展名,Linux怎么判断它是可执行文件?*/
运行:./test
/*为什么要./test,而不是直接test执行呢?*/
/*如果不指定输出文件名,是不是输出文件为a.out*/
/*那怎么执行a.out呢?*/
/*是不是也可以gcc test.c -o test*/
/*生成的test是不是可执行文件?象Windows里的exe?*/
/*为什么没有扩展名呢?没有扩展名,Linux怎么判断它是可执行文件?*/
运行:./test
/*为什么要./test,而不是直接test执行呢?*/
/*如果不指定输出文件名,是不是输出文件为a.out*/
/*那怎么执行a.out呢?*/
|
/*是不是也可以gcc test.c -o test*/
y
/*生成的test是不是可执行文件?象Windows里的exe?*/
y
/*为什么没有扩展名呢?没有扩展名,Linux怎么判断它是可执行文件?*/
it has exec mode
运行:./test
/*为什么要./test,而不是直接test执行呢?*/
./ not in PATH
/*如果不指定输出文件名,是不是输出文件为a.out*/
y
/*那怎么执行a.out呢?*/
./a.out
y
/*生成的test是不是可执行文件?象Windows里的exe?*/
y
/*为什么没有扩展名呢?没有扩展名,Linux怎么判断它是可执行文件?*/
it has exec mode
运行:./test
/*为什么要./test,而不是直接test执行呢?*/
./ not in PATH
/*如果不指定输出文件名,是不是输出文件为a.out*/
y
/*那怎么执行a.out呢?*/
./a.out
|
编译:gcc -o test test.c
/*是不是也可以gcc test.c -o test*/
可以的
/*生成的test是不是可执行文件?象Windows里的exe?*/
是的
/*为什么没有扩展名呢?没有扩展名,Linux怎么判断它是可执行文件?*/
扩展名你可以自己加上的……也可以不要,这是linux和win的一个区别
可执行文件的判断,呵呵,如果是在linux下,你看到的颜色是绿色的一般是可执行的:)
运行:./test
/*为什么要./test,而不是直接test执行呢?*/
因为你的当前目录没有在系统的env变量的PATH里,这样的话,系统不知道去哪里找可执行文件,指定./就是告诉系统在当前目录下找
/*如果不指定输出文件名,是不是输出文件为a.out*/
是的
/*那怎么执行a.out呢?*/
和test一样啊……
./a.out
/*是不是也可以gcc test.c -o test*/
可以的
/*生成的test是不是可执行文件?象Windows里的exe?*/
是的
/*为什么没有扩展名呢?没有扩展名,Linux怎么判断它是可执行文件?*/
扩展名你可以自己加上的……也可以不要,这是linux和win的一个区别
可执行文件的判断,呵呵,如果是在linux下,你看到的颜色是绿色的一般是可执行的:)
运行:./test
/*为什么要./test,而不是直接test执行呢?*/
因为你的当前目录没有在系统的env变量的PATH里,这样的话,系统不知道去哪里找可执行文件,指定./就是告诉系统在当前目录下找
/*如果不指定输出文件名,是不是输出文件为a.out*/
是的
/*那怎么执行a.out呢?*/
和test一样啊……
./a.out
|
其他都差不多,我补充两点
/*为什么没有扩展名呢?没有扩展名,Linux怎么判断它是可执行文件?*/
如果你
ls -l
就会看到最左边有权限标志如
_rwxrw_rw_,分成4组,1,_. 2,rwx. 3,rw_. 4.rw_
第一组表示这个文件的文件标志,c表示字符设备,b表示块设备,d表示目录.普通文件什么都没有.
第二组表示这个文件相对于所有者所具有的权限,r表示只读,w表示写,x表示执行权限(就是可执行文件了).
第三,四组分别表示这个文件相对于这个文件所有者所属组的所有其他人的权限,和不属于这个组的所有其他人的权限.
rwx表示拥有者具有读写执行权限.
gcc编译产生的输出可执行由gcc自动添加了x标志,所以....
你也可以用chmod命令改变权限标志,如,chmod +x test,或chmod 766 test 就是_rwxrw_rw_,可参见man chmod
/*为什么要./test,而不是直接test执行呢?*/
当在shell下直接输入一段字符,会被bash解释为想要执行可执行文件,bash首先在PATH环境变量中寻找这段字符所代表的可执行文件的路径,如果找到就执行,如果找不到就显示不能执行的信息,所以一般用户编译程序所处的目录都不会在PATH中所以需要指定目录./test。
/*为什么没有扩展名呢?没有扩展名,Linux怎么判断它是可执行文件?*/
如果你
ls -l
就会看到最左边有权限标志如
_rwxrw_rw_,分成4组,1,_. 2,rwx. 3,rw_. 4.rw_
第一组表示这个文件的文件标志,c表示字符设备,b表示块设备,d表示目录.普通文件什么都没有.
第二组表示这个文件相对于所有者所具有的权限,r表示只读,w表示写,x表示执行权限(就是可执行文件了).
第三,四组分别表示这个文件相对于这个文件所有者所属组的所有其他人的权限,和不属于这个组的所有其他人的权限.
rwx表示拥有者具有读写执行权限.
gcc编译产生的输出可执行由gcc自动添加了x标志,所以....
你也可以用chmod命令改变权限标志,如,chmod +x test,或chmod 766 test 就是_rwxrw_rw_,可参见man chmod
/*为什么要./test,而不是直接test执行呢?*/
当在shell下直接输入一段字符,会被bash解释为想要执行可执行文件,bash首先在PATH环境变量中寻找这段字符所代表的可执行文件的路径,如果找到就执行,如果找不到就显示不能执行的信息,所以一般用户编译程序所处的目录都不会在PATH中所以需要指定目录./test。
|
./表示执行当前目录下的程序,可以直接执行./a.out