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
1. **rc522.c** 和 **rc522.c~**:这些文件是C语言编写的源代码,很可能实现了与MFRC522芯片交互的驱动程序。MFRC522是一种常见的RFID读写器芯片,用于读取和写入RFID标签。".c~"通常是Unix/Linux系统中编辑器(如...
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欧),否则容易误进中断 ...
在`driver_key_misc.c`文件中,使用`misc_register`和`misc_unregister`来注册和注销混杂设备。混杂设备的设备号由内核自动分配,减少了开发者的工作。同样,按键事件的中断处理逻辑会在此驱动中实现。 3. Platform...
在Java中,`sun.misc.BASE64Encoder`和`sun.misc.BASE64Decoder`是用于处理BASE64编码和解码的类,它们位于`sun.misc`包下,这是一个非公开的、由Sun Microsystems提供的包,主要用于JVM内部使用。 然而,需要注意...
这可能涉及到C、C++、Python或其他编程语言。 2. **逆向工程**:如果源代码是加密或混淆的,可能需要使用反汇编器或动态调试器来理解其执行流程。 3. **漏洞挖掘**:查找可能的安全漏洞,如缓冲区溢出、格式字符串...
```c int main(int argc, char argv) { //定义三种动作类型 enum { UNCRYPT, SETUP_BCB, CLEAR_BCB } action; const char* ... } ``` uncrypt函数定义了三种动作类型,包括UNCRYPT、SETUP_BCB和CLEAR_BCB。在...
标准例程-V3.5库函数版本\keilkill.bat 标准例程-V3.5库函数版本\实验0 Template工程模板\CORE\core_cm3.c 标准例程-V3.5库函数版本\...标准例程-V3.5库函数版本\实验0 Template工程模板\STM32F10x_FWLib\inc\misc.h
在IT安全领域,尤其是网络安全竞赛(Capture The Flag, 简称CTF)中,"misc"类题目通常涵盖各种不同类型的问题,包括但不限于密码学、逆向工程、取证分析、Web安全以及我们的主题——二维码(QR码)研究。...
```c static struct miscdevice my_misc_dev = { .minor = MISC_DYNAMIC_MINOR, .name = "my_device", .fops = &my_fops, }; ``` 然后,通过`misc_register(&my_misc_dev)`将其注册到内核。 总的来说,`misc_...
1. da8xx.c 和 da8xx.h:这是一对C语言源代码文件和对应的头文件,通常用于实现和定义与DA8xx处理器相关的函数、结构体和常量。da8xx.c可能包含了驱动程序的实现,处理与DA8xx硬件交互的细节,而da8xx.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
C语言头文件 TRACEC语言头文件 TRACEC语言头文件 TRACEC语言头文件 TRACEC语言头文件 TRACEC语言头文件 TRACEC语言头文件 TRACEC语言头文件 TRACEC语言头文件 TRACEC语言头文件 TRACEC语言头文件 TRACEC语言头文件 ...
9. **数据结构导出**:分析后的结果可以导出为C、C++、Java或其他编程语言的结构体,方便在代码中直接使用。 在CTF比赛中,010 Editor常用于处理以下任务: - **逆向工程**:分析可执行文件的结构,寻找隐藏的函数...
标题 "Misc_keiluvision3_blink_" 暗示我们正在处理一个使用Keil uVision3集成开发环境(IDE)的项目,该项目专注于LED闪烁功能。这个项目可能是一个简单的嵌入式系统教程或者示例代码,用于演示如何在微控制器上...
Misc GIFs-crx插件是一款专为方便用户管理和使用GIF图像而设计的浏览器扩展程序。这款插件特别适用于那些经常在论坛、社交平台或聊天应用中分享动态图像的用户,如PHPBB论坛用户。它集成了大量的MISCers(可能是特定...
在“pcm_misc.c”这个源代码文件中,我们可以预见到可能会包含一些处理PCM数据的函数,比如读取、写入、转换或分析PCM数据的代码。这些函数可能涉及到对PCM样本的位操作,例如位左移(用于调整采样精度)或位运算...