cuda编译软件
❶ 在vs2010上运行CUDA6.0需要什么
要在VS2010上运行CUDA6.0,你需要以下几个步骤:
下载并安装CUDA Toolkit 6.0
首先,你需要从NVIDIA官网下载CUDA Toolkit 6.0,并按照提示进行安装。在安装过程中,请陆枯注意选择正确的操作系统和Visual Studio版本。
2. 配置Visual Studio
在安装完成后,你需要启动Visual Studio,并打开项目属性配置页面。在这里,你需要添加CUDA相关的编译器、链接器和头文件路径。
具体来说,在C/C++选项卡中,你需要将下列路径添加到"附加包含目录"中:
C:Program FilesNVIDIA GPU Computing ToolkitCUDAv6.0include
在链接器选项卡中,你需要添加以下路径到"附加库目录":
C:Program FilesNVIDIA GPU Computing ToolkitCUDAv6.0libx64 (如果你的操早和洞作系统是64位的)
最后,在"预处理器定义"中,添加 "_WIN64" 和 "WIN32" 这两个宏定义。
3. 编写CUDA程序并运行
现在,你已经完成了配置工作,可以开始棚蠢编写CUDA程序了。在程序中,你需要使用CUDA提供的语言扩展(如 __global__ 和 __device__)来标识出GPU可执行的函数,并使用CUDA专用的数据类型(如cudaMalloc()和cudaMemcpy())来管理GPU内存。
编写完CUDA程序后,你可以直接在Visual Studio中编译和运行程序。在调试过程中,你可以使用Visual Studio提供的调试工具来追踪CUDA程序的运行状态。
总结:
要在VS2010上运行CUDA6.0,你需要安装CUDA Toolkit 6.0,并在Visual Studio中进行配置。之后,你可以编写和调试CUDA程序,并使用Visual Studio提供的工具来优化程序性能和调试错误。
❷ 瀹为獙瀹cuda瀹夎
浠ヤ笅鏄瀹为獙瀹linux链嶅姟鍣╟uda瀹夎呭拰kaldi甯cuda缂栬疟镄勬祦绋嬶纴鍦╬cc鍜宲c涓婃祴璇曢氲繃銆
鍦╬cc涓婂疄楠屼简cuda7鍜宑uda6.5锛岀粨鏋渒aldi锛2015骞3链堢増锛変技涔庝笉鍏煎筩uda7锛屽湪kaldi-trunk/src/cudamatrix涓
make test 镐绘槸澶辫触锛屾渶钖庡畨瑁呯殑cuda6.5銆
鍦╬c涓婅牏妗ョ殑kaldi锛2014骞10链堜互鍓嶏级鍦╟uda6.5涓嬫祴璇曚笉阃氲繃锛宬aldi锛2015骞3链堢増锛夊彲浠ユ祴璇曢氲繃銆
鍦╬cc涓婄殑kaldi鍦╣pu 0 涓婃绘姤阌欙纴鍦╣pu 1涓婂彲浠ワ纴链钖庢垜𨰾疯礉镄勬枃楣忕殑娌℃敼杩囩殑cudamatrix/Makefile锛屽苟镓ц宫ake -B 閲嶆柊缂栬疟锛屽彲浠ョ敤gpu 0浜嗐
瀹夎呭墠鍑嗗 cuda_6.5.14_linux_64.run锛 鏂囦欢澶у皬928M锛岃繖鏄痯c链嶅姟鍣ㄤ笂淇濆瓨瀹夎呭寘镄勪綅缃銆
928M pc-pc: /home/pc/disk2/hcq/install_cuda/cuda_6.5.14_linux_64.run
kaldi鐗堟粴宸炴湰 2015骞3链
ps: 鍙浠ラ氲繃杩愯 locate --regex cuda.*.run$ 𨱒ユ煡镓炬満鍣ㄤ笂鍒浜轰互鍓崭笅镄刢uda瀹夎呭寘銆
涓銆佸畨瑁 cuda
(1) 鍒犻櫎宸叉湁nvidia锛屾媺榛戝悕鍗
sudo apt-get remove --purge nvidia*
sudo nano /etc/modprobe.d/blacklist.conf
blacklist.conf锷犲叆
(2) 寮濮嫔畨瑁
sudo service lightdm stop
chmod +x cuda_6.5.14_linux_64.run
sudo ./cuda_6.5.14_linux_64.run
瀹夎呬竴璺痽es鎴栭粯璁ら厤缃銆
鎴愬姛鎻愮ず锛
===========
= Summary =
===========
Driver: Installed
Toolkit: Installed in /usr/local/cuda-6.5
Samples: Installed in /home/hcq, but missing recommended libraries
Please make sure that
To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-6.5/bin
To uninstall the NVIDIA Driver, run nvidia-uninstall
Please see CUDA_Getting_Started_Guide_For_Linux.pdf in /usr/local/cuda-6.5/doc/pdf for detailed information on setting up CUDA.
(3) 閰岖疆鐜澧冨彉閲
鎸夌収涓婂甫澶囩寷涓姝ユ垚锷熸彁绀鸿剧疆PATH鍜孡D_LIBRARY_PATH 鐜澧冨彉閲
sudo vim /etc/profile
/etc/profile锷犲叆
PATH= LD_LIBRARY_PATH:/usr/local/cuda-6.5/lib64
export PATH
export LD_LIBRARY_PATH
(4) 娴嬭瘯
1. /usr/local/cuda/bin/nvcc -V
鏄剧ず镓瀹夎卌uda鐗堟湰锛
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2014 NVIDIA Corporation
Built on Thu_Jul_17_21:41:27_CDT_2014
Cuda compilation tools, release 6.5, V6.5.12
鍙浠ョ‘瀹氩畨瑁呯殑鐗堟湰涓6.5
2. cd /home/hcq/NVIDIA_CUDA-6.5_Samples/
鍙浠make 骞惰繘鍏ョ浉搴斿瓙鐩褰曡繍琛屾祴璇
渚嫔傦细 ./0_Simple/simplePrintf/simplePrintf 镓揿嵃
GPU Device 0: "Quadro 600" with compute capability 2.1
Device 0: "Quadro 600" with Compute 2.1 capability
printf() is called. Output:
[3, 0]: Value is:10
[3, 1]: Value is:10
.....
[2, 6]: Value is:10
[2, 7]: Value is:10
浜屻乲aldi甯cuda缂栬疟
(1) 棣栧厛杩涘叆tools鐩褰曞苟鎸夌収INSTALL鎸囩ず缂栬疟銆傚傛灉涔嫔墠宸茬粡缂栬疟杩囱烦杩囨ゆラわ纸tools涓嬬殑绋嫔簭娌℃湁浣跨敤cuda搴掳级銆
(2) 杩涘叆src鐩褰
1. make clean
2. ./configure
鍙浠ョ湅鍒版墦鍗颁俊鎭镄勬渶钖庢湁杩欎箞涓琛岋细
Using CUDA toolkit /usr/local/cuda (nvcc compiler and runtime libraries)
鍙浠ョ‘瀹歬aldi灏呜佸甫cuda瀹夎呫
3. make depend -j 24
4. make -j 24
鍦 make -j 24 杩囩▼涓濡傛灉链夌被浼间竴涓嬮敊璇锛
nvcc fatal : Unsupported gpu architecture 'compute_10'
鍒栾繘鍏src/cudamatrix鐩褰曪纴淇鏀筂akefile锛
鎶 CUDA_ARCH=-gencode arch=compute_10,code=sm_10 涓镄
-gencode arch=compute_10,code=sm_10 铡绘帀銆
閲嶆柊 make -j 24銆
(3) 濡傛灉浠ヤ笂姝ラゆ病链夐敊璇锛屽垯杩涘叆src/cudamatrix鐩褰曡繘琛屾祴璇
make test -j 5
鎴愬姛镄勮瘽鎻愮ず锛
Running cu-vector-test ...... SUCCESS
Running cu-matrix-test ...... SUCCESS
Running cu-math-test ...... SUCCESS
浠ヤ笂鍙傝冭嚜
http://blog.csdn.net/abcjennifer/article/details/23016583
Ubuntu12.04閰岖疆NVIDIA cuda5.5缁忛獙甯
鍒嗙被锛 Computer System Linux & MAC python2014-04-06 08:58 9938浜洪槄璇 璇勮(16) 鏀惰棌 涓炬姤
涔嫔墠閰嶈繃涓阆嶉兘蹇桦厜浜嗭纴鐜板湪瑕侀吨鏂伴厤涓阆岖湡鏄濂介毦杩囥伞伞傜壒姝よ板綍鍙傝幂绣绔欎互渚挎煡阒呫
=============
鐜澧冿细Ubuntu 12.04+Cuda5.5
The setup of CUDA development tools on a system running the appropriate version of Linux consists of a few simple steps:
瑙佸畼鏂归厤缃镓嫔唽锛 http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-linux/index.html
涓媟un濂戒简
[plain] view plain
[plain] view plain
blacklist.conf锷犲叆
[plain] view plain
[plain] view plain
Cuda5.5闆嗘垚浜唗oolkit锛宻dk鍜宒river, 镓浠ュ畨瑁呯殑镞跺欎竴璺钖屾剰涓嬫潵灏卞ソ浜
涔熷氨鏄疭DK瀹夎呭け璐ワ纴杩欎釜瀹樻柟镓嫔唽涓娄篃鎻愬埌浜呜В鍐虫柟妗堛
[plain] view plain
鍒版牴鐩褰曚笅镄/path/to/extract/dir/铡绘垒cuda-samples_5.5.22_*******.run, 瀹夎
[plain] view plain
[plain] view plain
浣夸箣鐢熸晥锛
source /etc/profile锛埚瑰簲profile锛夋垨sudo ldconfig锛埚瑰簲bashrc锛
杩樻湁涓绉嶈却dk镄勬柟娉曡 http://askubuntu.com/questions/338907/how-to-install-cuda-5-5-under-ubuntu-12-04-lts-64-bit
deviceQuery:
姝f枃链涓嬫柟
=============
姝ゅ栭梼涓婂叾浠栭厤缃鍙傝冿细
❸ CUDA和OpenCL有什么区别
从很多方面来看,CUDA和OpenCL的关系都和DirectX与OpenGL的关系很相像。如同DirectX和OpenGL一样,CUDA和OpenCL中,前者是配备完整工具包、针对单一供应商(NVIDIA)的成熟的开发平台,后者是一个开放的标准。
虽然两者抱着相同的目标:通用并行计算。但是CUDA仅仅能够在NVIDIA的GPU硬件上运行,而OpenCL的目标是面向任何一种Massively
Parallel Processor,期望能够对不同种类的硬件给出一个相同的编程模型。由于这一根本区别,二者在很多方面都存在不同:
1)开发者友好程度。CUDA在这方面显然受更多开发者青睐。原因在于其统一的开发套件(CUDA Toolkit, NVIDIA GPU
Computing SDK以及NSight等等)、非常丰富的库(cuFFT, cuBLAS, cuSPARSE, cuRAND, NPP,
Thrust)以及NVCC(NVIDIA的CUDA编译器)所具备的PTX(一种SSA中间表示,为不同的NVIDIA
GPU设备提供一套统一的静态ISA)代码生成、离线编译等更成熟的编译器特性。相比之下,使用OpenCL进行开发,只有AMD对OpenCL的驱动相对成熟。
2)跨平台性和通用性。这一点上OpenCL占有很大优势(这也是很多National
Laboratory使用OpenCL进行科学计算的最主要原因)。OpenCL支持包括ATI,NVIDIA,Intel,ARM在内的多类处理器,并能支持运行在CPU的并行代码,同时还独有Task-Parallel
Execution Mode,能够更好的支持Heterogeneous
Computing。这一点是仅仅支持数据级并行并仅能在NVIDIA众核处理器上运行的CUDA无法做到的。
3)市场占有率。作为一个开放标准,缺少背后公司的推动,OpenCL显然没有占据通用并行计算的主流市场。NVIDIA则凭借CUDA在科学计算、生物、金融等领域的推广牢牢把握着主流市场。再次想到OpenGL和DirectX的对比,不难发现公司推广的高效和非盈利机构/标准委员会的低效(抑或谨慎,想想C++0x)。
很多开发者都认为,由于目前独立显卡市场的萎缩、新一代处理器架构(AMD的Graphics Core Next (GCN)、Intel的Sandy
Bridge以及Ivy
Bridge)以及新的SIMD编程模型(Intel的ISPC等)的出现,未来的通用并行计算市场会有很多不确定因素,CUDA和OpenCL都不是终点,我期待未来会有更好的并行编程模型的出现(当然也包括CUDA和OpenCL,如果它们能够持续发展下去)。
❹ 瀹夎卌uda蹇呴’瑕佸畨瑁卾s钖
CUDA镊甯缂栬疟鍣锛屽彲浠ュ崟镫浣跨敤銆
浣嗗傛灉寮鍙戝甫锲惧舰鐣岄溃镄勫簲鐢锛岄偅杩樻槸鍏埚畨瑁匳S镟翠负瀹炵敤銆
❺ 如何在kali linux中安装英伟达内核模块cuda和pyrit
安装cuda以及nvidia驱动
这庆吵一步比较简单,安装之前,推荐大家编辑一下/etc/apt/source.list文件镇差毁,把国外的源注释掉换成国内科大的,下载比较快。科大源的地址如下
deb http://mirrors.ustc.e.cn/kali kali main non-free contrib
deb-src http://mirrors.ustc.e.cn/kali kali main non-free contrib
deb http://mirrors.ustc.e.cn/kali-security kali/updates main contrib non-free
设置完之后,执行以下命令安装
apt-get update
apt-get install nvidia-detect nvidia-libopencl1 nvidia-opencl-common nvidia-support nvidia-opencl-icd nvidia-visual-profiler nvidia-glx nvidia-installer-cleanup nvidia-kernel-common nvidia-smi nvidia-alternative nvidia-opencl-dev libglx-nvidia-alternatives nvidia-kernel-dkms nvidia-cuda-toolkit nvidia-vdpau-driver nvidia-xconfig glx-alternative-nvidia libgl1-nvidia-alternatives nvidia-settings libgl1-nvidia-glx xserver-xorg-video-nvidia libcublas4 libcudart4 libcufft4 libnpp4 libnvidia-compiler libcuda1 libcuinj4 libnvidia-ml1 libxvmcnvidia1 libcusparse4 libcurand4 python-pycuda-doc python-pycuda-headers python-pycuda nvidia-cuda-doc nvidia-cuda-gdb
由于包比较多可能有点慢,安装过程会弹出两个窗口需要确认,直接OK就好,执行完之后toolkit和驱动都装上了,然后把一些变量写入系统,在/root/.bashrc最后面加上下面一段
PATH=$PATH:/usr/lib/nvidia-cuda-toolkit/bin
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/nvidia-cuda-toolkit/lib:/lib
export PATH
export LD_LIBRARY_PATH
可以执行一下ldconfig马上生效,不过反正都要重启一次的了,重启。
安装pyrit-cuda
下面重新编译个pyrit来试一试使用GPU。下载pyrit的地址是:
https://code.google.com/p/pyrit/downloads/list
我们需要下载pyrit-0.4.0.tar.gz和cpyrit-cuda-0.4.0.tar.gz,下载完之后,安装一下编译所需要的工具
atp-get install libpcap-dev python2.7-dev
解压pyrit-0.4.0.tar.gz并且安装
tar -xzvf pyrit-0.4.0.tar.gz
cd pyrit-0.4.0
python setup.py build
python setup.py install
解压cpyrit-cuda-0.4.0.tar.gz
tar -xzvf cpyrit-cuda-0.4.0.tar.gz
cd cpyrit-cuda-0.4.0
这里需要进行一些改动,编辑setup.py,把第35行
for path in ('/usr/local/cuda', '/opt/cuda'):
改成
for path in ('/usr/local/cuda','御备/usr/lib/nvidia-cuda-toolkit','/opt/cuda'):
免得安装程序找不到nvcc
然后就安装
python setup.py build
python setup.py install
安装完,运行一下
pyrit list_cores
应该能看到GPU了,类似
#1: 'CUDA-Device #1 'GeForce 8400 GS''
#2: 'CPU-Core (SSE2)'
#3: 'CPU-Core (SSE2)'
#4: 'CPU-Core (SSE2)'
#5: 'CPU-Core (SSE2)'
#6: 'CPU-Core (SSE2)'
#7: 'CPU-Core (SSE2)'
#8: 'CPU-Core (SSE2)'
安装optimus
把源Key取回来
wget -O - http://suwako.nomanga.net/suwako.asc | apt-key add -
在/etc/apt/source.list中加入Bumblebee的源
deb http://suwako.nomanga.net/debian sid main contrib
deb-src http://suwako.nomanga.net/debian sid main
然后执行安装
apt-get update
apt-get install bumblebee bumblebee-nvidia
安装完毕,把root加入bemblebe组,然后重启
adser root bumblebee
重启完毕可以测试一下,分别运行
glxspheres
optirun glxspheres
可以看到帧数是不同的
❻ linux下CUDA程序一般怎么编译
有以下步骤:
1.源程序的编译
在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器. 下面
我们以一个实例来说明如何使用gcc编译器.
假设我们有下面一个非常简单的源程序(hello.c):
int main(int argc,char **argv)
{
printf("Hello Linux\n");
}
要编译这个程序,我们只要在命令行下执行:
gcc -o hello hello.c
gcc 编译器就会为我们生成一个hello的可执行文件.执行./hello就可以看到程
序的输出结果了.命令行中 gcc表示我们是用gcc来编译我们的源程序,-o 选项表示
我们要求编译器给我们输出的可执行文件名为hello 而hello.c是我们的源程序文件.
gcc编译器有许多选项,一般来说我们只要知道其中的几个就够了. -o选项我们
已经知道了,表示我们要求输出的可执行文件名. -c选项表示此慧我们只要求编译器输出
目标代码,而不必要输出可执行文件. -g选项拍扒差表示我们要求编译器在编译的时候提
供我们以后对程序进行调试的信息.
知道了这三个选项,我们就可以编译我们自己所写的简单的源程序了,如果你
想要知道更多的选项,可以查看gcc的帮助文档,那里有着许多对其它选项的详细说
明.
2.Makefile的编写
假设我们有下面这样的一个程序,源代码如下袭皮:
#include "mytool1.h"
#include "mytool2.h"
int main(int argc,char **argv)
{
mytool1_print("hello");
mytool2_print("hello");
}
#ifndef _MYTOOL_1_H
#define _MYTOOL_1_H
void mytool1_print(char *print_str);
#endif
#include "mytool1.h"
void mytool1_print(char *print_str)
{
printf("This is mytool1 print %s\n",print_str);
}
#ifndef _MYTOOL_2_H
#define _MYTOOL_2_H
void mytool2_print(char *print_str);
#endif
#include "mytool2.h"
void mytool2_print(char *print_str)
{
printf("This is mytool2 print %s\n",print_str);
}
当然由于这个程序是很短的我们可以这样来编译
gcc -c main.c
gcc -c mytool1.c
gcc -c mytool2.c
gcc -o main main.o mytool1.o mytool2.o
这样的话我们也可以产生main程序,而且也不时很麻烦.但是如果我们考虑一
下如果有一天我们修改了其中的一个文件(比如说mytool1.c)那么我们难道还要重
新输入上面的命令?也许你会说,这个很容易解决啊,我写一个SHELL脚本,让她帮我
去完成不就可以了.是的对于这个程序来说,是可以起到作用的.但是当我们把事情
想的更复杂一点,如果我们的程序有几百个源程序的时候,难道也要编译器重新一
个一个的去编译?
为此,聪明的程序员们想出了一个很好的工具来做这件事情,这就是make.我们
只要执行以下make,就可以把上面的问题解决掉.在我们执行make之前,我们要先
编写一个非常重要的文件.--Makefile.对于上面的那个程序来说,可能的一个
Makefile的文件是:
# 这是上面那个程序的Makefile文件
main:main.o mytool1.o mytool2.o
gcc -o main main.o mytool1.o mytool2.o
main.o:main.c mytool1.h mytool2.h
gcc -c main.c
mytool1.o:mytool1.c mytool1.h
gcc -c mytool1.c
mytool2.o:mytool2.c mytool2.h
gcc -c mytool2.c
有了这个Makefile文件,不过我们什么时候修改了源程序当中的什么文件,我们
只要执行make命令,我们的编译器都只会去编译和我们修改的文件有关的文件,其
它的文件她连理都不想去理的.
下面我们学习Makefile是如何编写的.
在Makefile中也#开始的行都是注释行.Makefile中最重要的是描述文件的依赖
关系的说明.一般的格式是:
target: components
TAB rule
第一行表示的是依赖关系.第二行是规则.
比如说我们上面的那个Makefile文件的第二行
main:main.o mytool1.o mytool2.o
表示我们的目标(target)main的依赖对象(components)是main.o mytool1.o
mytool2.o 当倚赖的对象在目标修改后修改的话,就要去执行规则一行所指定的命
令.就象我们的上面那个Makefile第三行所说的一样要执行 gcc -o main main.o
mytool1.o mytool2.o 注意规则一行中的TAB表示那里是一个TAB键
Makefile有三个非常有用的变量.分别是$@,$^,$<代表的意义分别是:
$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件.
如果我们使用上面三个变量,那么我们可以简化我们的Makefile文件为:
# 这是简化后的Makefile
main:main.o mytool1.o mytool2.o
gcc -o $@ $^
main.o:main.c mytool1.h mytool2.h
gcc -c $<
mytool1.o:mytool1.c mytool1.h
gcc -c $<
mytool2.o:mytool2.c mytool2.h
gcc -c $<
经过简化后我们的Makefile是简单了一点,不过人们有时候还想简单一点.这里
我们学习一个Makefile的缺省规则
.c.o:
gcc -c $<
这个规则表示所有的 .o文件都是依赖与相应的.c文件的.例如mytool.o依赖于
mytool.c这样Makefile还可以变为:
# 这是再一次简化后的Makefile
main:main.o mytool1.o mytool2.o
gcc -o $@ $^
.c.o:
gcc -c $<
好了,我们的Makefile 也差不多了,如果想知道更多的关于Makefile规则可以查
看相应的文档.
3.程序库的链接
试着编译下面这个程序
#include
int main(int argc,char **argv)
{
double value;
printf("Value:%f\n",value);
}
这个程序相当简单,但是当我们用 gcc -o temp temp.c 编译时会出现下面所示
的错误.
/tmp/cc33Ky.o: In function `main':
/tmp/cc33Ky.o(.text+0xe): undefined reference to `log'
collect2: ld returned 1 exit status
出现这个错误是因为编译器找不到log的具体实现.虽然我们包括了正确的头
文件,但是我们在编译的时候还是要连接确定的库.在Linux下,为了使用数学函数,我
们必须和数学库连接,为此我们要加入 -lm 选项. gcc -o temp temp.c -lm这样才能够
正确的编译.也许有人要问,前面我们用printf函数的时候怎么没有连接库呢?是这样
的,对于一些常用的函数的实现,gcc编译器会自动去连接一些常用库,这样我们就没
有必要自己去指定了. 有时候我们在编译程序的时候还要指定库的路径,这个时候
我们要用到编译器的 -L选项指定路径.比如说我们有一个库在 /home/hoyt/mylib下
,这样我们编译的时候还要加上 -L/home/hoyt/mylib.对于一些标准库来说,我们没
有必要指出路径.只要它们在起缺省库的路径下就可以了.系统的缺省库的路径/lib
/usr/lib /usr/local/lib 在这三个路径下面的库,我们可以不指定路径.
还有一个问题,有时候我们使用了某个函数,但是我们不知道库的名字,这个时
候怎么办呢?很抱歉,对于这个问题我也不知道答案,我只有一个傻办法.首先,我到
标准库路径下面去找看看有没有和我用的函数相关的库,我就这样找到了线程
(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.程序的调试
我们编写的程序不太可能一次性就会成功的,在我们的程序当中,会出现许许
多多我们想不到的错误,这个时候我们就要对我们的程序进行调试了.
最常用的调试软件是gdb.如果你想在图形界面下调试程序,那么你现在可以选
择xxgdb.记得要在编译的时候加入 -g选项.关于gdb的使用可以看gdb的帮助文件.由
于我没有用过这个软件,所以我也不能够说出如何使用. 不过我不喜欢用gdb.跟踪
一个程序是很烦的事情,我一般用在程序当中输出中间变量的值来调试程序的.当
然你可以选择自己的办法,没有必要去学别人的.现在有了许多IDE环境,里面已经自
己带了调试器了.你可以选择几个试一试找出自己喜欢的一个用.
5.头文件和系统求助
有时候我们只知道一个函数的大概形式,不记得确切的表达式,或者是不记得函数在那个头文件进行了说明.这个时候我们可以求助系统,比如说我们想知道fread这个函数的确切形式,我们只要执行 man fread 系统就会输出着函数的详细解释的.和这个函数所在的头文件说明了。如果我们要write这个函数说明,当我们执行man write时,输出的结果却不是我们所需要的。因为我们要的是write这个函数的说明,可是出来的却是write这个命令的说明。为了得到write的函数说明我们要用man 2 write。2表示我们用的是write这个函数是系统调用函数,还有一个我们常用的是3表示函数是c的库函数。