Deepin 15.11 编译安装 MySQL-5.6.46 时,报错:
/usr/bin/ld: /usr/local/lib/libssl.a(s23_srvr.o): relocation R_X86_64_PC32 against symbol `ssl23_get_client_hello' can not be used when making a shared object; recompile with -fPIC
Deepin 15.11 编译安装 MySQL-5.6.46 时,报错:
/usr/bin/ld: /usr/local/lib/libssl.a(s23_srvr.o): relocation R_X86_64_PC32 against symbol `ssl23_get_client_hello' can not be used when making a shared object; recompile with -fPIC
用gcc编译一个C程序的时候出现这样的警告:
warning: control reaches end of non-void function
为什么要将 libapue.a 移到 /usr/local/lib 中呢?
因为 libapue.a 是 apue.h 头文件中包含的所有函数及宏定义的具体实现,是一个静态链接库。
查看 ld.conf.d/libc.conf 你会发现 gcc 在搜索链接库的时候默认会去搜索 /usr/local/lib/ 中的文件,所以我们将其放在这里,一劳永逸。
方法一:定义时赋值
struct Member test = {-10, 3.141590, "method one", 0.25};
注意:对应的顺序,不能错位。
| 编号 | 信号名称 | 缺省动作 | 说明 |
|---|---|---|---|
| 1 | SIGHUP | 终止 | 终止控制终端或进程 |
| 2 | SIGINT | 终止 | 键盘产生的中断(Ctrl-C) |
| 3 | SIGQUIT | dump | 键盘产生的退出 |
| 4 | SIGILL | dump | 非法指令 |
| 5 | SIGTRAP | dump | debug中断 |
| 6 | SIGABRT/SIGIOT | dump | 异常中止 |
| 7 | SIGBUS/SIGEMT | dump | 总线异常/EMT指令 |
| 8 | SIGFPE | dump | 浮点运算溢出 |
| 9 | SIGKILL | 终止 | 强制进程终止 |
OpenSSL 加解密库
操作系统:Mac OS X 10.11.5
1、下载书中的源代码:点击下载
2、切换到解压后的目录 unpv13e,先查看下 README,依次执行:
./configure cd lib make cd ../libfree make
| fopen(打开文件) | |
|
定义函数 |
FILE * fopen(const char * path,const char * mode); |
|
函数说明 |
参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。 mode有下列几种形态字符串: r 打开只读文件,该文件必须存在。 上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask值。 |
|
返回值 |
文件顺利打开后,指向该流的 文件指针 就会被返回。若果文件打开失败则返回 NULL,并把错误代码存在 errno 中。 |
|
附加说明 |
一般而言,开文件后会作一些文件读取或写入的动作,若开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误判断及处理。 |
|
范例 |
#include <stdio.h>
int main(int argc, char **argv)
{
FILE *fp;
fp = fopen("/Users/jianbao/ClionProjects/apue/123.c", "a+");
if (fp == NULL)
{
printf("open fail\n");
}
else
{
printf("open success\n");
}
fclose(fp);
return 0;
}
|
gcc 是GNU Compiler Collection,原名为Gun C语言编译器,因为它原本只能处理C语言,但gcc很快地扩展,包含很多编译器(C、C++、Objective-C、Ada、Fortran、 Java),可以说gcc是GNU编译器集合。
g++ 是C++编译器。
cc 是 Unix系统的 C Compiler,一个是古老的 C 编译器。而 Linux 下 cc 一般是一个符号连接,指向 gcc;可以通过 $ ls -l /usr/bin/cc 来简单察看,该变量是 make 程序的内建变量,默认指向 gcc 。 cc 符号链接和变量存在的意义在于源码的移植性,可以方便的用 gcc 来编译老的用cc编译的Unix软件,甚至连 makefile 都不用改在,而且也便于 Linux 程序在 Unix下 编译。
CC 则一般是 makefile 里面的一个名字标签,即宏定义,表示采用的是什么编译器(如:CC = gcc)。