sagaeon 发表于 2005-6-16 17:21:25

应用编程版FAQ

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

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语言,你的问题可想而知没有多少人愿意回答(不过我们会尽量回答的)
当然,这里没有多少美化高手,想要好看的字体之类的还是到美化版问吧,诸如此类,到合适的版块问问题。

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


Q:(sjinny提供)
#include <math.h>



#include "math.h"

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


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

#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();
}

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

sjinny 发表于 2005-7-1 14:23:36

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


Q:

#include <math.h>



#include "math.h"

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

netfarming 发表于 2005-8-7 19:11:04

#include<math.h>中的include目录的路径是什么?

win_lei 发表于 2006-2-21 20:22:07

请大家帮我看看,为什么这个程序编译不过去,抱错信息是这样的

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

win_lei 发表于 2006-2-21 20:22:38

请大家帮我看看,为什么这个程序编译不过去,抱错信息是这样的

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

mcsemcse 发表于 2006-6-21 09:40:11

顶了~

cavendish 发表于 2006-10-23 22:51:36

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

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

tomclarence 发表于 2006-11-29 17:37:53

希望能讲讲Unix 高级环境编程的知识

zhaohan7 发表于 2007-10-17 17:20:21

:lol:
页: [1]
查看完整版本: 应用编程版FAQ