gcc笔记

7 篇文章 0 订阅
订阅专栏

GCC 最初的意思是GNU C Compiler,而后变成了 GNU Compiler Collection,也就是 GNU 编译器家族(常见的语言都支持)。


内容如下:
1. GCC的组成部分以及使用到的软件
2. 编译和链接
3. gcc选项
4. 库搜索路径


1,GCC的组成部分以及使用到的软件
GCC 是由许多组件组成的。表 1 列出了 GCC 的各个部分,但它们也并不总是出现 的。有些部分是和语言相关的,所以如果没有安装某种特定语言,系统中就不会出现相关的文件。

表1:GCC 安装的各个部分
部分描述
c++gcc 的一个版木,默认语言设置为 C++,而且在连接的时候自动包含标准 C++ 库。这和 g++ 一样
ccl实际的C编译程序
cclplus实际的 C++ 编泽程序
collect2在不使用 GNU 连接程序的系统上,有必要运行 collect2 来产生特定的全局初始化代码(例如 C++ 的构造函数和析构函数)
configureGCC 源代码树根目录中的一个脚木。用于设置配置值和创建GCC 编译程序必需的 make 程序的描述文件
crt0.o这个初始化和结束代码是为每个系统定制的,而且也被编译进该文件,该文件然后会被连接到每个可执行文件中来执行必要的启动和终止程序
cygwin1.dllWindows 的共享库提供的 API,模拟 UNIX 系统调用
f77该驱动程序可用于编译 Fortran
f771实际的 Fortran 编译程序
g++gcc 的一个版木,默认语言设置为 C++,而且在连接的时候自动包含标准 C++ 库。这和 c++ 一样
gcc该驱动程序等同于执行编译程序和连接程序以产生需要的输出
gcj该驱动程序用于编译 Java
gnat1实际的 Ada 编译程序
gnatbind一种工具,用于执行 Ada 语言绑定
gnatlink一种工具,用于执行 Ada 语言连接
jc1实际的 Java 编译程序
libgcc该库包含的例程被作为编泽程序的一部分,是因为它们可被连接到实际的可执行程序中。 它们是特殊的例程,连接到可执行程序,来执行基木的任务,例如浮点运算。这些库中的例程通常都是平台相关的
libgcj运行时库包含所有的核心 Java 类
libobjc对所有 Objective-C 程序都必须的运行时库
libstdc++运行时库,包括定义为标准语言一部分的所有的 C++ 类和函数


表 2 列出的软件和 GCC 协同工作,目的是实现编译过程。有些是很基本的(例如 as 和 Id),而其他一些则是非常有用但不是严格需耍的。尽管这些工具中的很多都是各种 UNIX 系统的本地共具,但还是能够通过 GNU 包 binutils 得到大多数工具。
 

表2:GCC 使用的软件工具
工具描述
addr2line给出一个可执行文件的内部地址,addr2line 使用文件中的调试信息将地址翻泽成源代码文 件名和行号。该程序是 binutils 包的一部分
ar这是一个程序,可通过从文档中增加、删除和析取文件来维护库文件。通常使用该工具是为了创建和管理连接程序使用的目标库文档。该程序是 binutils 包的一部分
asGNU 汇编器。实际上它是一族汇编器,因为它可以被编泽或能够在各种不同平台上工作。 该程序是 binutils 包的一部分
autoconf产生的 shell 脚木自动配置源代码包去编泽某个特定版木的 UNIX
c++filt程序接受被 C++ 编泽程序转换过的名字(不是被重载的),而且将该名字翻泽成初始形式。 该程序是 binutils 包的一部分
f2c是 Fortran 到C的翻译程序。不是 GCC 的一部分
gcovgprof 使用的配置工具,用来确定程序运行的时候哪一部分耗时最大
gdbGNU 调试器,可用于检查程序运行时的值和行为
GNATSGNU 的调试跟踪系统(GNU Bug Tracking System)。一个跟踪 GCC 和其他 GNU 软件问题的在线系统
gprof该程序会监督编泽程序的执行过程,并报告程序中各个函数的运行时间,可以根据所提供 的配置文件来优化程序。该程序是 binutils 包的一部分
ldGNU 连接程序。该程序将目标文件的集合组合成可执行程序。该程序是 binutils 包的一部
libtool一个基本库,支持 make 程序的描述文件使用的简化共享库用法的脚木
make一个工具程序,它会读 makefile 脚木来确定程序中的哪个部分需要编泽和连接,然后发布 必要的命令。它读出的脚木(叫做 makefile 或 Makefile)定义了文件关系和依赖关系
nlmconv将可重定位的目标文件转换成 NetWare 可加载模块(NetWare Loadable Module, NLM)。该 程序是 binutils 的一部分
nm列出目标文件中定义的符号。该程序是 binutils 包的一部分
objcopy将目标文件从一种二进制格式复制和翻译到另外一种。该程序是 binutils 包的一部分
objdump显示一个或多个目标文件中保存的多种不同信息。该程序是 binutils 包的一部分
ranlib创建和添加到 ar 文档的索引。该索引被 Id 使用来定位库中的模块。该程序是 binutils 包的一部分
ratforRatfor 预处理程序可由 GCC 激活,但不是标准 GCC 发布版的一部分
readelf从 ELF 格式的目标文件显示信息。该程序是 binutils 包的一部分
size列出目标文件中每个部分的名字和尺寸。该程序是 binutils 包的一部分
strings浏览所有类型的文件,析取出用于显示的字符串。该程序是 binutils 包的一部分
strip从目标文件或文档库中去掉符号表,以及其他调试所需的信息。该程序是 binutils 包的一部
vcgRatfor 浏览器从文木文件中读取信息,并以图表形式显示它们。而 vcg 工具并不是 GCC 发布中的一部分,但 -dv 选项可被用来产生 vcg 可以理解的优化数据的格式
windresWindow 资源文件编泽程序。该程序是 binutils 包的一部分

2,编译和链接
1)编译和链接一次性操作完成
方法1:gcc main.c  #在 gcc 命令后面紧跟源文件名,会在当前目录生成a.out可执行文件

方法2:gcc main.c -o main #可以透过-o指定生成exe文件的名称

2)编译和链接分开操作
step1:编译
方法1: gcc -c main.c #就将 main.c 编译为 main.o

方法2:gcc -c main.c -o a.o #这样生成的目标文件的名字就是 a.o

step2:链接
方法1:gcc main.o #就将 main.o 链接为 a.out

方法2:gcc main.o -o main.out #这样生成的可执行文件的名字就是 main.out

3,GCC 编译器在编译一个C语言程序时需要经过以下 4 步:
将C语言源程序预处理,生成.i文件。
预处理后的.i文件编译成为汇编语言,生成.s文件。
将汇编语言文件经过汇编,生成目标文件.o文件。
将各个模块的.o文件链接起来生成一个可执行程序文件。

GCC 编译流程如下图所示:

GCCç¼è¯æµç¨

.i文件、.s文件、.o文件可以认为是中间文件或临时文件,如果使用 GCC 一次性完成C语言程序的编译,那么只能看到最终的可执行文件,这些中间文件都是看不到的,因为 GCC 已经经它们删除了。

3,gcc选项

-c
编译、汇编指定的源文件,但是不进行链接

-S
将C语言源文件编译为汇编语言,但是并不汇编该程序。使用该选项,我们可以查看C语言代码对应的汇编代码。

-E
将C语言源文件进行预处理,但是并不编译该程序。对于一般的预处理问题,可以使用这个选项进行查看,例如,宏的展开问题、文件的包含问题等。

-I
指定包含的头文件的目录

-g 选项
可生成能被 gdb 调试器所使用的调试信息。

-o
指定输出文件

-o [file1] [file2]    
将文件 file2 编译成可执行文件 file1

+++++++++++++++++++++++++++++++++++++++++++++++++++
-o选项使用举例
1) 将源文件作为输入文件,将可执行文件作为输出文件,也即完整地编译整个程序:
$ gcc main.c func.c -o app.out

将 main.c 和 func.c 两个源文件编译成一个可执行文件,其名字为 app.out。如果不使用 -o 选项,那么将生成名字为 a.out 的可执行文件。

2) 将源文件作为输入文件,将目标文件作为输出文件,也即只编译不链接:
$ gcc -c main.c -o a.o

将源文件 main.c 编译为目标文件 a.o。如果不使用 -o 选项,那么将生成名为 main.o 的目标文件。

3) 将源文件作为输入文件,将预处理文件作为输出文件,也即只进行预处理操作:
$ gcc -E main.c -o demo.i

对源文件 main.c 进行预处理操作,并将结果放在 demo.i 文件中。如果不使用 -o 选项,那么将生成名为 main.i 的预处理文件。

4) 将目标文件作为输入文件,将可执行文件作为输出文件:
$ gcc -c func.c main.c
$ gcc func.o main.o -o app.out

第一条命令只编译不链接,将生成 func.o 和 main.o 两个目标文件。第二条命令将生成的两个目标文件生成最终的可执行文件 app.out。如果不使用 -o 选项,那么将生成名字为 a.out 的可执行文件。
+++++++++++++++++++++++++++++++++++++++++++++++++++

-shared
生成动态链接库。输入文件可以是源文件、汇编文件或者目标文件。

-fPIC 
作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code)

+++++++++++++++++++++++++++++++++
举例
从源文件生成动态链接库:
$ gcc -fPIC -shared func.c -o libfunc.so

从目标文件生成动态链接库:
$ gcc -fPIC -c func.c -o func.o
$ gcc -shared func.o -o libfunc.so
+++++++++++++++++++++++++++++++++

摘自:http://c.biancheng.net/view/2382.html

-O0 、-O1 、-O2 、-O3
编译器的优化选项的 4 个级别,-O0 表示没有优化, -O1为 缺省值,-O3 优化级别最高。

gcc 命令的常用选项

选项解释
-ansi只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色, 例如 asm 或 typeof 关键词。
-c只编译并生成目标文件。
-DMACRO以字符串"1"定义 MACRO 宏。
-DMACRO=DEFN以字符串"DEFN"定义 MACRO 宏。
-E只运行 C 预编译器。
-g生成调试信息。GNU 调试器可利用该信息。
-IDIRECTORY指定额外的头文件搜索路径DIRECTORY。
-LDIRECTORY指定额外的函数库搜索路径DIRECTORY。
-lLIBRARY连接时搜索指定的函数库LIBRARY。
-m486针对 486 进行代码优化。
-o FILE生成指定的输出文件。用在生成可执行文件时。
-O0不进行优化处理。
-O 或 -O1优化生成代码。
-O2进一步优化。
-O3比 -O2 更进一步优化,包括 inline 函数。
-shared生成共享目标文件。通常用在建立共享库时。
-static禁止使用共享连接。
-UMACRO取消对 MACRO 宏的定义。
-w不生成任何警告信息。
-Wall生成所有警告信息。

摘自: http://www.runoob.com/w3cnote/gcc-parameter-detail.html

GCC选项 –I,-l,-L
-I:指定第一个寻找头文件的目录

-L:指定第一个寻找库文件的目录

-l:表示在库文件目录中寻找指定的动态库文件

例:

gcc –o hello hello.c –I /home/hello/include –L /home/hello/lib –lworld

/home/hello/include 作为第一个头文件的寻找目录。头文件寻找顺序:/home/hello/include –> /usr/include –> usr/local/include

/home/hello/lib 作为第一个库文件的寻找目录。库文件的寻找顺序:/home/hello/lib –> /lib –> /usr/lib –> /usr/local/lib

-lworld 表示在库文件路径中寻找libworld.so的动态库文件

4,库搜索路径

静态库链接时搜索路径顺序:
1. ld会去找GCC命令中的参数-L
2. 再找gcc的环境变量LIBRARY_PATH
3. 再找内定目录 /lib /usr/lib /usr/local/lib 这是当初compile gcc时写在程序内的

动态链接时、执行时搜索路径顺序:
1. 编译目标代码时指定的动态库搜索路径
2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径
3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径
4. 默认的动态库搜索路径/lib
5. 默认的动态库搜索路径/usr/lib

有关环境变量:
LIBRARY_PATH环境变量:指定程序静态链接库文件搜索路径
LD_LIBRARY_PATH环境变量:指定程序动态链接库文件搜索路径

摘自: http://www.sohu.com/a/165547861_777180

32位版:加上 -m32 参数,生成32位的代码。
64位版:加上 -m64 参数,生成64位的代码。
debug版:加上 -g 参数,生成调试信息。
release版:加上 -static 参数,进行静态链接,使程序不再依赖动态库。加上 -O3 参数,进行最快速度优化。加上-DNDEBUG参数,定义NDEBUG宏,屏蔽断言。

当没有-m32或-m64参数时,一般情况下会生成跟操作系统位数一致的代码,但某些编译器存在例外,例如——
32位Linux下的GCC,默认是编译为32位代码。
64位Linux下的GCC,默认是编译为64位代码。
Window系统下的MinGW,总是编译为32位代码。因为MinGW只支持32位代码。
Window系统下的MinGW-w64(例如安装了TDM-GCC,选择MinGW-w64),默认是编译为64位代码,包括在32位的Windows系统下。

摘自: http://blog.sina.com.cn/s/blog_53a7e8a30102vyrs.html

GCC 学习 笔记GCC学习笔记
04-22
GCC学习笔记
cdlinux安装gcc笔记.txt
07-08
cdlinux安装gcc, 操作流程字数补丁, 比较简单没什么好下载的
GCC笔记
IPJMC的专栏
11-22 164
GCC 编译流程:   GCC在编译C/C++程序时,会经过一下4步 1.预处理 gcc -E hello.c -o hello.i   2.编译 gcc -S hello.i -o hello.s   3.汇编 gcc -c hello.s -o hello.o   4.链接 gcc hello.o -o hello     一步到位方法:gcc hello.c...
gcc和makefile用法总结(建议收藏)_gcc makefile(2),2024年最新10年阿里开发架构师经验分享
2401_84281703的博客
04-17 993
整个项目的逻辑很简单,其中 add.c、sub.c 和 div.c 这 3 个文件中各包含一个函数,分别实现将两个整数做相加、相减和除法操作,而 test.h 仅包含这 3 个函数的声明部分,main.c 是主程序文件,其通过引入 test.h 头文件调用了 3 个函数,从而分别完成了对用户输入的 2 个整数做相加、相减以及除法操作。其中,xxx 代指我们为该库起的名字,比如 Linux 系统自带的一些静态链接库名称为 libc.a、libgcc.a、libm.a,它们的名称分别为 c、gcc 和 m。
GCC 学习笔记
热门推荐
应公子的专栏
09-29 1万+
1、GCC的编译和安装2、预处理    #define 可以支持不定数量的参数。    例子如下:    #define err(...) fprintf(stderr,__VA_ARGS__)    err("%s,%d/r/n","The error code:",48);    扩展为:    fprintf(stderr,"%s,%d/r/n","The error code:",48);
gcc工具链的选项笔记
06-30
gcc工具链的选项笔记
gcc源码总结
02-27
gcc源代码的总结主要包括语法树的操作,和对程序的解析。
gcc编译器的使用笔记
08-12
在学习linux过程中,对gcc编译器的使用选项的一些摘录,希望对大家的学习有帮助!
GCC笔记(转)
kuaile12320的专栏
04-01 520
http://hi.baidu.com/jzinfo/blog/item/5b5cc1fd68bf3a47d7887d35.htmlGCC笔记2007-08-05 02:12The History of GCC1984年,Richard Stallman发起了自由软件运动,GNU (Gnus Not Unix)项目应运而生,3年后,最初版的GCC横空出世,成为第一
什么是gcc
SzMing
11-14 871
扫盲帖~~~    gcc   簡介    本節學習GNU推出的Linux系統下C編譯器——gcc,主要介紹這種編譯器的基本原理和使用方法,以及編譯過程中所產生的錯誤的原因及對策。         gcc簡介      Linux系統下的gcc(GNU   C   Compiler)是GNU推出的功能強大、性能優越的多平台編譯器,是GNU的代表作品之一。gcc是可以在多種硬體平台上編譯出
gcc大全
weixin_41783335的博客
10-05 609
1。gcc包含的c/c++编译器 gcc,cc,c++,g++,gcc和cc是一样的,c++和g++是一样的,一般c程序就用gcc编译,c++程序就用g++编译 2。gcc的基本用法 gcc test.c这样将编译出一个名为a.out的程序 gcc test.c -o test这样将编译出一个名为test的程序,-o参数用来指定生成程序的名字 3。为什么会出现undefined referen...
教育科学规划项目中期检查报告书.docx
06-05
教育科学规划项目中期检查报告书.docx
中医药研发风险分担基金备案申报专家组评审表.docx
06-05
中医药研发风险分担基金备案申报专家组评审表.docx
eiq模型,19届新训练的
06-05
该分类模型采用了一种高效的架构,大大减少了模型参数和计算量,这使得它非常适合在移动和嵌入式设备上进行实时图像分类和检测。在速度与性能的平衡上,该模型通过使用深度可分离卷积来降低计算复杂度,同时保持或甚至提高分类的准确性。另外,MobileNetV2引入了反向残差结构,这种结构有助于提高模型的学习能力,同时减少参数数量。一个是残差连接: 帮助梯度在深层网络中传播,减少训练难度,提高准确性。一个是线性瓶颈: 在每个残差块的开始和结束使用线性激活函数,有助于模型学习更丰富的特征。其次,MobileNetV2通过在残差块中引入线性瓶颈和通道注意力机制,提高了模型的表达能力。最后在部署方面,由于MobileNetV2的设计考虑了在资源有限的设备上进行推理,因此它可以在不牺牲太多准确性的情况下,提供高资源利用率,同时由于其结构简单,MobileNetV2易于在各种硬件上进行部署,包括CPU、GPU和专用神经网络加速器。
mybatis-plus在idea中如何分页- 3.添加分页拦截器,4.分页mapper方法,5.自定义sql使用wrapper
最新发布
06-05
mybatis_plus在idea中如何分页- 3.添加分页拦截器+模糊查询, 4.分页mapper方法,5.自定义sql使用wrapper
ubuntu 安装多个gcc
04-01
在 Ubuntu 中安装多个版本的 GCC 可以使用以下步骤: 1. 添加 PPA ``` sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt update ``` 2. 安装 GCC 版本 例如,安装 GCC 8 和 GCC 9: ``` sudo apt install gcc-8 g++-8 gcc-9 g++-9 ``` 3. 配置默认的 GCC 版本 使用 update-alternatives 命令配置默认的 GCC 版本: ``` sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 80 --slave /usr/bin/g++ g++ /usr/bin/g++-8 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 --slave /usr/bin/g++ g++ /usr/bin/g++-9 ``` 其中,数字 80 和 90 表示优先级,数字越大,优先级越高。 4. 切换 GCC 版本 使用 update-alternatives 命令切换 GCC 版本: ``` sudo update-alternatives --config gcc ``` 然后选择要使用的 GCC 版本。 注意:在切换 GCC 版本时,请确保您的代码与所选的版本兼容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 高等数学(下)知识点总结 127067
  • 高等数学(上)知识点总结 93520
  • 线性代数知识点总结 74802
  • HDMI ARC功能详解及应用介绍 43375
  • linux proc目录详解 24911

分类专栏

  • 多媒体 2篇
  • linux系统编程 6篇
  • linux内核 17篇
  • 计算机基础 3篇
  • 架构设计
  • 代码管理 7篇
  • android 11篇
  • 杂项 5篇
  • 系统分析 9篇
  • LINUX文件系统 8篇
  • LINUX多进程与多线程 1篇
  • 汇编 2篇
  • C++ 6篇
  • 安全相关 4篇
  • VIM 1篇
  • LINUX命令 2篇
  • 智能语音 7篇
  • 车载 6篇
  • 网络编程 3篇
  • 物联网 3篇
  • Java
  • 数据结构 1篇
  • WIFI
  • Bluetooth 8篇
  • Web 4篇
  • 数学 5篇
  • C语言 3篇
  • debug 2篇
  • TV 1篇
  • AI 1篇

最新评论

  • 麦克风阵列设计(1)

    DA767: 您好博主,有没有参考文献

  • 高等数学(上)知识点总结

    林发鹏: 可以转到qq浏览器,再转pdf

  • Compile error: Cannot find a C++ compiler that supports both C++11 and the specified C++ flags

    cdio118小老弟: 提示有一些软件包无法安装,说g++依赖g++-7,但是无法被安装。

  • 麦克风阵列设计(2)

    风吹屁屁凉~~~: 请问是怎么看出3个麦克风可达到的SNR为6dB左右的呢?在阵元对天线方向图的影响这一节

  • 高等数学(下)知识点总结

    xxxderui: 平面平行与x轴是A=0

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 音频基础介绍
  • 常见的音频编码和文件格式
  • C语言函数之可变参数原理:va_start、va_arg及va_end
2023年2篇
2019年108篇
2018年4篇
2013年6篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

聚圣源合肥恒大华府穿成炮灰女配后和反派HE了我说90后对孩子起名的网站愿无岁月可回头烈火英雄百度云徐 起名店铺免费网起名上海娱乐频道李云迪事件女主起名字徐什么好女孩池子与笑果文化和解ie重装公寓起名字好听的名字奶茶七分甜绝望主妇第二季2021年起名字男孩瓷都免费起名名测试打分本年度思想工作总结女孩春天出生起什么名字好听悬疑小说排行榜武汉市洪山区地图琉璃观看电视剧全集免费纨绔疯子属虎好听的品牌名字怎么起2021新生儿起名旷世奇才蚁贼txt下载阴历十月起名淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化