1. warning root cause.
warning: incompatible implicit declaration of built-in function ‘exit’
使用gcc编译程序,若碰到这样的warning:incompatible implicit declaration of built-in function ‘exit’,则表明没有include相应的头文件。
在*.h文件里,加了一行include就解决问题了: #include <stdlib.h>
warning: `sys_errlist' is deprecated; use `strerror' or `strerror_r' instead
sys_errlist[errno] -> strerror(errno)
2. sockaddr & sockaddr_in
struct sockaddr结构类型是用来保存socket信息的:
struct sockaddr {
unsigned short sa_family; /* 地址族, AF_xxx */
char sa_data[14]; /* 14 字节的协议地址 */
};
sa_family一般为AF_INET,代表Internet(TCP/IP)地址族;sa_data则包含该socket的IP地址和端口号。
另外还有一种结构类型:
struct sockaddr_in {
short int sin_family; /* 地址族 */
unsigned short int sin_port; /* 端口号 */
struct in_addr sin_addr; /* IP地址 */
unsigned char sin_zero[8]; /* 填充0 以保持与struct sockaddr同样大小 */
};
这个结构更方便使用。sin_zero用来将sockaddr_in结构填充到与struct sockaddr同样的长度,可以用bzero()或memset()函数将其置为零。指向sockaddr_in 的指针和指向sockaddr的指针可以相互转换,这意味着如果一个函数所需参数类型是sockaddr时,你可以在函数调用的时候将一个指向sockaddr_in的指针转换为指向sockaddr的指针;或者相反。
3. c extern
1. 用于变量,告诉编译器,这是变量声明,变量的定义在另外的模块。
2. 对函数来说,没有意义。
3. extern "C", 告诉C++编译器,用C链接,也就是不要mangle函数名。
4. 要注意数组与指针不同, 数组extern int a[]; 指针用 extern int *b;
4. alias indent='indent -ts1 -bli0 -cli2'
5. gcc base.c -o base `pkg-config --cflags --libs gtk+-2.0`
pkg-config 是通过库提供的一个 .pc 文件获得库的各种必要信息的,包括版本信息、编译和连接需要的参数等。这些信息可以通过 pkg-config 提供的参数单独提取出来直接供编译器和连接器使用。
/usr/lib/pkgconfig/gtk+-2.0.pc
6. typedef 定义普通函数
typedef int FUN(int age, char* name);
FUN create_student
same with:
int create_student(int age, char* name);
在一些函数具有相同参数的时候可以简化函数定义.
7. gcc -l参数和-L参数
-l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?-lname,在连接时,装载名字为“libname.a”的函数库:-lm表示连接名为“libm.a”的数学函数库。就拿数学库来说,他的库名是m,他的库文件名是libm.so,很容易看出,把库文件名的头lib和尾.so去掉就是库名了
好了现在我们知道怎么得到库名,当我们自已要用到一个第三方提供的库名字libtest.so,那么我们只要把libtest.so拷贝到/usr/lib里,编译时加上-ltest参数,我们就能用上libtest.so库了(当然要用libtest.so库里的函数,我们还需要与libtest.so配套的头文件)
放在/lib和/usr/lib和/usr/local/lib里的库直接用-l参数就能链接了,但如果库文件没放在这三个目录里,而是放在其他目录里,这时我们只用-l参数的话,链接还是会出错,出错信息大概是:“/usr/bin/ld: cannot find -lxxx”,也就是链接程序ld在那3个目录里找不到libxxx.so,这时另外一个参数-L就派上用场了,比如常用的X11的库,它在/usr/X11R6/lib目录下,我们编译时就要用-L/usr/X11R6/lib -lX11参数,-L参数跟着的是库文件所在的目录名。再比如我们把libtest.so放在/aaa/bbb/ccc目录下,那链接参数就是-L/aaa/bbb/ccc -ltest
-include用来包含头文件,但一般情况下包含头文件都在源码里用#include xxxxxx实现,如果不在源码中include, gcc -include test.h. -include参数很少用。-I参数是用来指定头文件目录,/usr/include目录一般是不用指定的,gcc知道去那里找,但是如果头文件不在/usr/include里我们就要用-I参数指定了,比如头文件放在/myinclude目录里,那编译命令行就要加上-I/myinclude参数了,如果不加你会得到一个"xxxx.h: No such file or directory"的错误。-I参数可以用相对路径,比如头文件在当前目录,可以用-I.来指定。上面我们提到的--cflags参数就是用来生成-I参数的
分享到:
相关推荐
sun.misc.BASE64Encoder找不到jar包的解决方法? 在MyEclipse中编写Java代码时,用到了BASE64Decoder,import sun.misc.BASE64Decoder;可是Eclipse提示: Access restriction: The type BASE64Decoder is not ...
2018红帽线上MISC(听说你们喜欢手工爆破)文件----OS_038c9291c8039792d1aad140f6664671.iso
ctf misc 杂项 snow隐写加解密工具 压缩包中有snow隐写工具帮助手册,值得下载。 SNOW.EXE -C 2.txt Windows下SNOW隐写工具 snow.exe -C -m "被隐藏的信息" -p 密码 "文件名" snow -C -m "I am lying" -p "hello ...
文件: misc.c misc.h main.c ALL_Includes.h stm32f10x_exti.c 功能:中断服务程序 注意:使用时LED灯接限流电阻(普通红灯:2.2K欧),GPIOA3必须接下拉电阻(10K欧),否则容易误进中断 ...
apache-commons-codec-1.4.jar和sun.misc.BASE64Encoder.jar和sun.misc.BASE64Decoder.jar
标准例程-V3.5库函数版本\keilkill.bat 标准例程-V3.5库函数版本\实验0 Template工程模板\CORE\core_cm3.c 标准例程-V3.5库函数版本\...标准例程-V3.5库函数版本\实验0 Template工程模板\STM32F10x_FWLib\inc\misc.h
DES算法的C源码 benchmark.c des.c descalc.c descert.c descycle.c getopt.c getpass.c main.c misc.c radlogin.c uudecode.c uuencode.c
linux-tools-misc 杂项
lsuper_Embarcadero.Delphi.XE2.RTM.Inc.Update4.v16.0.4429.46931.Lite.v5.5.Misc.7z
该下载资源与博客内容相对应,提供8个文件以供读者下载,分别为delay.c delay.h ps2.c ps2.h misc.c misc.h sys.c sys.h。 该下载不包括cube配置文件,需要读者按照博客步骤进行文件移植。
点击 ADD 先添加 MAIN 固件再添加 FS 固件,在 MISC files 里调入你压缩好的 tpa.zip 闭合文件,点击 Flash 选项后手机重装电池再按 C 键或者 2+5 键重新连接手机写入固件闭合,问一下“点击 ADD 先添加 MAIN 固件再...
proot:chroot,mount --bind和binfmt_misc,没有Linux的特权设置
mysql协议分析,通过libcap抓包,并分析mysql的协议的开源程序。编译命令:gcc -O2 -lpcap -o mysqlsniffer mysqlsniffer.c packet_handlers.c misc.c
语言:English 您最喜欢的图像在一个地方! 此弹出窗口包含用于MISCERS的GIF列表,用于各种线程和帖子。 单击图像,PHPBB代码将被复制到您的剪贴板。 现在你不再需要搜索它们!
目录组织请按照以下层次结构在Checked C项目目录中组织子目录: checkedc # root directory for the whole project| -- build # build directory of the LLVM compiler| -- llvm # LLVM src| -- misc # the safe-mm-...
杂项Windows函数可能有用或没用的 C 函数的集合(杀死进程/删除服务/更改系统音量/打开 CD 托盘)模式文件激活当前进程的调试模式特权所需的一些代码。 这对于某些操作是必需的,例如枚举系统中的所有句柄。杀.c ...
无需降级scipy的情况下解决AttributeError: module ‘scipy.misc’ has no attribute ‘imread’, AttributeError: module ‘scipy.misc’ has no attribute ‘imresize’, AttributeError:module ‘scipy.misc’ ...
杂项杂项代码和文档source \ ApiSetSchemaView Windows ApiSetSchema Viewer(V2,V4,V6) 源\ StripDebug 删除VisualStudio 2015+留下的调试信息来源\ AMSI AMSI相关实验源\ AMSI \ AmsiProviderATL使用ATL以C ++...
s3c-i2c s3c2440-i2c: i2c-0: S3C I2C adapter Advanced Linux Sound Architecture Driver Version 1.0.24. NET: Registered protocol family 2 IP route cache hash table entries: 1024 (order: 0, 4096 bytes) ...
中文版本的MISRA-C-2004,汽车电子行业嵌入式开发可以下载学习