当前时区 GMT+8, 现在时间是 2008-7-6 07:09 游客: 注册 登录 仅登录论坛 | 搜索 帮助
标题: 应用编程版FAQ
sagaeon
版主
Rank: 7Rank: 7Rank: 7


UID 96885
精华 2
积分 4165
帖子 2150
阅读权限 255
注册 2004-2-20
来自 家
状态 离线
发表于 2005-6-16 17:21  资料  短消息  加为好友  添加 sagaeon 为MSN好友 通过MSN和 sagaeon 交谈 ICQ 状态 Yahoo!
应用编程版FAQ

            欢迎来到Linuxfans这个大家庭!
              欢迎来到Linuxfans应用编程技术版!
          相信来到这里的都是对Linux有浓厚兴趣的Linuxer,能够身处GNU/Linux蓬勃发展的时代,是我们所有计算机爱好者的幸运,她带给了我们太多的快乐(包括泪水 :D )。在无数个日夜执着于gcc,./a.out,gdb的日子,我们学会了coding,熟悉了debug,明白了什么是free。生活多了一种选择,于是多了一种趣味...
   让我们在GNU/Linux的天地里更进一步吧,各位fans,前进之前让我念几句 only you 吧

1. 请多用google。把你的出错信息拷到google里搜索,一定会找到你想要的
2. 请有空多看看精华吧。知道大家来论坛是为解决问题的,不过有空的时候还是慢慢欣赏一下精华吧
3.请选择正确的发贴区域。比如,你上不了网或字体不好看到这儿来问可不是一个好想法。
4. 请相互尊重吧,不过,相信大家都尊重别人,只是能有更多一点交流技巧就更好了
5. 这不是唯一一个可以学习Linux的论坛或中文论坛,还有许多出色的Linux论坛,我们知识的积累也很短暂,所以多到其它论坛学习,博采众家之长吧,不过,记得回来哟


进入正题吧
这是一个以入门为主的FAQ,欢迎大家补充和对有误之处进行指正。

Q.  我编译好程序后的可执行文件a.out不能运行
A: 在提示符下输入 ./a.out。这是因为Linux命令的搜索路径没有当前目录。当然你可以将当前目录加入到搜索路径中,不过强烈建议不这样做。

Q. gcc test.cpp -o test这样的命令不能编译c++程序
A: 用 g++ test.cpp ...。GCC是Gnu Compiler Collection,这一组套件中包含不同的编译器编译不同的语言,比如g++编译c++语言,gcj编译java。

Q. 编译程序时得到undefined reference to 'xxxx'这样的错误提示
A: 那你一定是缺少某个库,用 -l参数将库加入。Linux的库命名是一致的,一般为libxxx.so,或libxxx.a,libxxx.la,那么你要链接某个库就用-lxxx,去掉头lib及"."后面的so,la,a等即可。
同时,常见的库链接方法为:
数学库 -lm ; posix线程 -lpthread

Q: 我写了一个GTk+程序foo.c,但gcc -o foo foo.c报错
A: 用 gcc `pkg-config --libs --cflasg gtk+-2.0` foo.c -o foo来编译你的程序foo.c。因为一个GTk程序实际上要用gtk,gdk,gdk_pixbuf,pango,gobject等为库,你可以 -lgdk -lgobject -lglib -lX11等,但用 pkg-config --libs --cflags gtk+-2.0帮你做完了这些。实际上,shell会将 `....` 中的输出原封原样的替换掉 `....`。至于pkg-config 命令的作用,请查询相关资料。(注意,这里`是左上角~一起的那个反引号)还要注意的是 $(pkg-config --libs --cflags gtk+-2.0)也可以完成这个功能,而且推荐。(试试 echo $(ls)和 echo `ls` )

Q. 我输入gcc,系统出现类似 bash: gcc: command not found的信息
A: 可能是:1. 你没有将gcc位置设置在指定搜索路径中。bash用PATH这个环境变量搜索
           2. 你没有安装gcc
对以上两个问题的解决,本公社有一个shell版可能更好地满足你。

Q. Linux下有集成开发环境吗?有哪些?
A:有,比如Anjuta,Kdevelop,或者基于java的Eclipse等

Q. API是什么?
A:Application Programming Interface应用编程接口。是系统提供给用户对系统进行操作的一组函数调用。显然,任何系统都要提供这个功能程序员才能在上面写程序,所以不要问Linux下有没有api了。只是要注意的是有些函数是系统提供的,有些是C函数库的实现,也就是C库函数,在Linux下一般是glibc,当然,还有其它的c库实现。

Q. 我在Linux上做了一个程序,可老师问我为什么不能在Windows上运行?(社员hobby!的苦恼)
A:  其实你不妨这样说:我没有钱来购买windows+vs, 而且就我所知windows和vs都是禁止拷贝的。所以除非老师能多拨给我20000经费,我无法进行windows下的开发。(社员wsm的建议)

Q. 为什么我的帖子没有人回答?
A:简单地说,你的问题没有太多人了解。毕竟Linux下编程涉及太多方面的问题,要全部精通是不可能的。
还有一种情况,比如你没有看过一本c语言的书想通过在论坛问问题学习C语言,你的问题可想而知没有多少人愿意回答(不过我们会尽量回答的)
当然,这里没有多少美化高手,想要好看的字体之类的还是到美化版问吧,诸如此类,到合适的版块问问题。

Qsjinny提供)我要用一个函数,但是只记得函数名了……
A:用man命令,可以查到一些函数的具体的说明,里面可以看到函数的参数接口、用法以及要用的头文件。


Qsjinny提供)[code:1]
#include <math.h>
[/code:1]

[code:1]
#include "math.h"
[/code:1]
有什么不同吗?
A:有的。使用尖括号的话,编译时会先在系统include目录里搜索,如果找不到才会在源代码所在目录搜索;使用双引号则相反,会先在源代码目录里搜索。这就意味着,当系统里(如/usr/include/里)有一个叫做math.h的头文件,而你的源代码目录里也有一个你自己写的math.h头文件,那么使用尖括号时用的就是系统里的;而使用双引号的话则会使用你自己写的那个。
所以建议:
使用系统里提供的头文件时使用尖括号
使用自己编写的头文件时使用双引号


Q:如何获得当前运行程序的绝对路径?
A:这是Mozilla给出的答案[code:1]

#include <stdio.h>
#include <dirent.h>

main()
{
char exePath[NAME_MAX+1];
char fullPath[NAME_MAX+1];
sprintf(exePath,"/proc/%d/exe",getpid());
readlink(exePath,fullPath,NAME_MAX);
printf("%s\n",fullPath);
getchar();
} [/code:1]

Q:如何接收键盘的单个字符即返回(即不用回车,也就是Windows下的getche函数在Linux下如何实现)?
A:这是Mozilla给出的答案
待续





上天保佑我的家人健康幸福!
顶部
sjinny
金牌会员
Rank: 8Rank: 8



UID 11894
精华 5
积分 8686
帖子 6478
阅读权限 90
注册 2003-1-9
状态 离线
发表于 2005-7-1 14:23  资料  短消息  加为好友 
Q:
我要用一个函数,但是只记得函数名了……
A:
用man命令,可以查到一些函数的具体的说明,里面可以看到函数的参数接口、用法以及要用的头文件。


Q:
[code:1]
#include <math.h>
[/code:1]

[code:1]
#include "math.h"
[/code:1]
有什么不同吗?
A:
有的。使用尖括号的话,编译时会先在系统include目录里搜索,如果找不到才会在源代码所在目录搜索;使用双引号则相反,会先在源代码目录里搜索。这就意味着,当系统里(如/usr/include/里)有一个叫做math.h的头文件,而你的源代码目录里也有一个你自己写的math.h头文件,那么使用尖括号时用的就是系统里的;而使用双引号的话则会使用你自己写的那个。
所以建议:
使用系统里提供的头文件时使用尖括号
使用自己编写的头文件时使用双引号

顶部
netfarming
新手上路
Rank: 1



UID 197087
精华 0
积分 20
帖子 8
阅读权限 10
注册 2005-8-7
状态 离线
发表于 2005-8-7 19:11  资料  主页 短消息  加为好友 
#include<math.h>中的include目录的路径是什么?

顶部
win_lei
新手上路
Rank: 1



UID 211517
精华 0
积分 5
帖子 2
阅读权限 10
注册 2006-2-21
状态 离线
发表于 2006-2-21 20:22  资料  短消息  加为好友 
请大家帮我看看,为什么这个程序编译不过去,抱错信息是这样的

请大家帮我看看,为什么这个程序编译不过去,抱错信息是这样的
这是一个已经编译好的程序,当我执行./configure时出现
checking for libelf include directories ... no
configure: error:*** could not locate libelf headers***
希望各位哥哥,帮帮忙看看

顶部
win_lei
新手上路
Rank: 1



UID 211517
精华 0
积分 5
帖子 2
阅读权限 10
注册 2006-2-21
状态 离线
发表于 2006-2-21 20:22  资料  短消息  加为好友 
请大家帮我看看,为什么这个程序编译不过去,抱错信息是这样的

请大家帮我看看,为什么这个程序编译不过去,抱错信息是这样的
这是一个已经编译好的程序,当我执行./configure时出现
checking for libelf include directories ... no
configure: error:*** could not locate libelf headers***
希望各位哥哥,帮帮忙看看

顶部
mcsemcse
新手上路
Rank: 1



UID 220463
精华 0
积分 3
帖子 1
阅读权限 10
注册 2006-6-21
状态 离线
发表于 2006-6-21 09:40  资料  短消息  加为好友 
顶了~

顶部
cavendish
中级会员
Rank: 3Rank: 3


UID 9721
精华 1
积分 763
帖子 303
阅读权限 30
注册 2002-12-27
来自 China.gif
状态 离线
发表于 2006-10-23 22:51  资料  主页 短消息  加为好友 


QUOTE:
Q. 我在Linux上做了一个程序,可老师问我为什么不能在Windows上运行?(社员hobby!的苦恼)
A: 其实你不妨这样说:我没有钱来购买windows+vs, 而且就我所知windows和vs都是禁止拷贝的。所以除非老师能多拨给我20000经费,我无法进行windows下的开发。(社员wsm的建议)

在windows下开发应用,vs不是必须买的。
只要有了windows操作系统,cygwin/mingw+gtk/qt都可以开发的。买windows么,oem的也就几百,单买怎么也得1-2k。





顶部
tomclarence
新手上路
Rank: 1


UID 61807
精华 0
积分 8
帖子 3
阅读权限 10
注册 2003-9-16
来自 China.gif
状态 离线
发表于 2006-11-29 17:37  资料  短消息  加为好友  QQ
希望能讲讲Unix 高级环境编程的知识

顶部
zhaohan7
新手上路
Rank: 1



UID 243754
精华 0
积分 3
帖子 6
阅读权限 10
注册 2007-10-15
状态 离线
发表于 2007-10-17 17:20  资料  短消息  加为好友 

顶部
 


Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
清除 Cookies - 联系我们 - 中国Linux公社 - WAP