一般可以用gcc编译器 1. 头文件 象conio.h应该变成curses.h 2. 没有itoa函数 itoa?不对吧,标准C/C++里根本没有这个函数。即使在Windows平台下某些编译器提供了该函数[3],没有任何移植性不说,还只能解决int类型(也许其他函数还可以解决long、unsigned long等类型),浮点类型又怎么办?当然,办法还是有,那就是:sprintf。 char s[100]; sprintf(s, "%f", 123.123456); 3. 关于sqrt,sin和cos函数 就算是引入math.h头文件,也不会找到sqrt,sin和cos函数。应该用链接库来解决。 有时候我们使用了某个函数,但是我们不知道库的名字,这个时候怎么办呢?很抱歉,对于这个问题我也不知道答案,我只有一个傻办法.首先, 我到标准库路径下面去找看看有没有和我用的函数相关的库,我就这样找到了线程(thread)函数的库文件(libpthread.a). 当然,如果找不到,只有一个笨方法.比如我要找sin这个函数所在的库. 就只好用 nm -o /lib/*.so|grep sin>~/sin 命令,然后看~/sin文件,到那里面去找了. 在sin文件当中,我会找到这样的一行libm-2.1.2.so:00009fa0 W sin 这样我就知道了sin在 libm-2.1.2.so库里面,我用 -lm选项就可以了(去掉前面的lib和后面的版本标志,就剩下m了所以是 -lm). 4. Makefile出现missing separator的错误 原因是目标声明行下面的命令行必须用Tab键分开(而不是空格) PG: PG.o [ Tab键 ]gcc -o PG -O -O2 -lm /lib/ld-2.2.93.so PG.o PG.o: PG.c pointgroup.h [ Tab键 ]gcc -c -O -O2 PG.c clean: [ Tab键 ]rm -f *.o 5. 注意文件的DOS格式字符 调试的时候应该注意文件可能有DOS格式字符,必须先用如下命令去掉文件中的DOS格式字符: tr -d <file> tmp_file mv tmp_file <file> 附: ******************************************************* gcc 常用命令行列表 ******************************************************* http://www.chinaunix.net 作者:wayne168 发表于:2003-04-19 16:02:55 -o FILE 指定输出文件名,在编译为目标代码时,这一选项不是必须的。如果FILE没有指定,缺省文件名是a.out. -c 只编译不链接 -DFOO=BAR 在命令行定义预处理宏FOO,其值为BAR -IDIRNAME 将DIRNAME加入到头文件的搜索目录列表中 -LDIRNAME 将DIRNAME加入到库文件的搜索目录列表中,缺省情况下gcc 只链接共享库 -static 链接静态库,即执行静态链接 -lFOO 链接名为libFOO的函数库 -g 在可执行程序中包含标准调试信息 -ggdb 在可执行程序中包含只有GNU debugger才能使别的达两条是信息 -O 优化编译过的代码 -ON 指定代码优化的级别为N,o<=N<=3 -ansi 支持ANSI/ISO C的标准语法,取消GNU的语法扩展中与该标准有冲突的部分 (但这一选项并不能保证生成ANSI兼容的代码) -pedantic 允许发出ANSI/ISO C标准所列出的所有警告 -pedantic -errors 允许发出ANSI/ISO C标准所列出的所有错误 -traditional 支持Kernighan & Ritchie C语法(如用旧式语法定义函数);如果不知道这个选项的含义,也没有关系 -w 关闭所有警告,建议不要使用此项 .Wall 允许发出gcc能提供的所有有用的警告,也可以用-W(warning)来标记指定的警告 -werror 把所有警告转换为错误,以在警告发生时中止编译过程 -MM 输出一个make兼容的相关列表 -v 显示在编译过程的每一步中用到的命令

|