⑴ 如何利用gcc编译选项检测函数参数个数
gcc的一个编译选项:-fstack-protector,以下是关于这个选项的描述: -fstack-protector 启用该选项后编译器会产生额外的代码来检测缓冲区溢出,例如栈溢出攻击。这是通过在有缺陷的函数中添加一个保护变量来实现的。这包括会调用到alloca的函数.
⑵ GCC编译器的参数与空格
按照INSTALL中的介绍,也是常用的方法,在configure的时候,加上–host=arm-linux,结果没有实现我们要的效果,没有将编译器从默认的
gcc改成arm-linux-gcc,编译器还是用的默认的gcc:
[crifan@localhost
lrzsz-0.12.20]$
CFLAGS=-O2
./configure
–host=arm-linux
loading
cache
./config.cache
………………..
checking
for
gcc…
(cached)
gcc
checking
whether
the
C
compiler
(gcc
-O2
)
works…
yes
checking
whether
the
C
compiler
(gcc
-O2
)
is
a
cross-compiler…
no
………………..
后来经过多次尝试,最后受默认的
CFLAGS=-O2
./configure
进行配置所启发,想到,是否可以将CC参数传入到configure中,
结果证实,如果没有自己的cache-file,即时加了对的CC参数,也还是无法传入:
[crifan@localhost
lrzsz-0.12.20]$
CFLAGS=-O2
CC=arm-linux-gcc
./configure
–host=arm-linux
loading
cache
./config.cache
………………..
checking
for
gcc…
(cached)
gcc
checking
whether
the
C
compiler
(gcc
-O2
)
works…
yes
checking
whether
the
C
compiler
(gcc
-O2
)
is
a
cross-compiler…
no
checking
whether
we
are
using
GNU
C…
(cached)
yes
………………..
而且,如果CC参数放在configure后面:
./configure
CC=arm-linux-gcc
则不能识别:
[crifan@localhost
lrzsz-0.12.20]$
CFLAGS=-O2
./configure
CC=arm-linux-gcc
configure:
warning:
CC=arm-linux-gcc:
invalid
host
type
………………..
参数传递必须像
CFLAGS=-O2
./configure
一样,将参数设置放在configure的前面:
CC=arm-linux-gcc./configure
才能识别的。
必须要自己制定自己的cache-file
然后用./configure进行新配置,加上CC参数,才会即时生效,编译器才可以变成我们要的arm-linux-gcc:
[crifan@localhost
lrzsz-0.12.20]$
CC=arm-linux-gcc
./configure
–cache-file=cache_file_0
–prefix=/usr/crifan/lrzsz
………………..
checking
for
gcc…
arm-linux-gcc
checking
whether
the
C
compiler
(arm-linux-gcc
)
works…
yes
checking
whether
the
C
compiler
(arm-linux-gcc
)
is
a
cross-compiler…
yes
checking
whether
we
are
using
GNU
C…
yes
………………..
否则,就无法将我们的CC参数传入了:
[crifan@localhost
lrzsz-0.12.20]$
CC=arm-linux-gcc
./configure
–prefix=/usr/crifan/lrzsz
………………..
checking
for
gcc…
(cached)
gcc
checking
whether
the
C
compiler
(gcc
)
works…
yes
checking
whether
the
C
compiler
(gcc
)
is
a
cross-compiler…
no
checking
whether
we
are
using
GNU
C…
(cached)
yes
………………..
[crifan@localhost
lrzsz-0.12.20]$
CFLAGS=-O2
CC=arm-linux-gcc
./configure
–cache-file=cache_file_0
loading
cache
cache_file_0
………………..
checking
for
gcc…
arm-linux-gcc
checking
whether
the
C
compiler
(arm-linux-gcc
-O2
)
works…
yes
checking
whether
the
C
compiler
(arm-linux-gcc
-O2
)
is
a
cross-compiler…
yes
checking
whether
we
are
using
GNU
C…
yes
最好此处在加上–prefix=/usr/crifan/lrzsz,表示具体安装到哪里
[crifan@localhost
lrzsz-0.12.20]$
CFLAGS=-O2
CC=arm-linux-gcc
./configure
–cache-file=cache_file_0
–prefix=/usr/crifan/lrzsz
loading
cache
cache_file_0
………………..
checking
for
gcc…
arm-linux-gcc
checking
whether
the
C
compiler
(arm-linux-gcc
-O2
)
works…
yes
checking
whether
the
C
compiler
(arm-linux-gcc
-O2
)
is
a
cross-compiler…
yes
checking
whether
we
are
using
GNU
C…
yes
………………..
其中,/usr/crifan/lrzsz是已经建立好的,已经存在的文件夹,上面这样表示编译后,
将生成的可执行文件安装拷贝到那个目录.
⑶ C写windows程序用gcc编译生成时,命令行加参数-lgdi32,在程序中写什么代码去掉参数
编译方法:格式 gcc [option] [sourcefilename]常用的选项最简单的是:gcc hello.c默认的情况下将生成a.out的可执行性文件,
只需要在终端上输入./a.out就可以看到执行的结果,如果你想指定生成目标文件的名字那么你可以加上 -o选项,命令如下:gcc -o hello hello.c
命令:gcc -c hello hello.c
⑷ Linux gcc 编译参数问题
-l 使用库。
这个库的名字是 pthread 。
POSIX 线程是:线程的 POSIX标准,定义了创建和操纵线程的一套 API。
实现 POSIX 线程标准的库常被称作 Pthreads,一般用于 Unix-like POSIX 系统,如 Linux、 Solaris,但是 Microsoft Windows上的实现也存在,例如, pthreads-w32可以用于支持 Pthread API M的子集 [1]。
以上部分文字出自维基网络,故本回答的文字基于GNU自由文档许可证之条款下发布。
另外抗议网络知道封杀维基网络的连接。
⑸ cmd调用gcc编译c源码,并传参
下面将通过对一个程序的编译来演示整个过程。
1
2
3
4
5
6
7
#include <stdio.h>
int main()
{
printf("happy new year!\n");
return 0;
}
1:预处理:编译器将C程序的头文件编译进来,还有宏的替换,可以用gcc的参数-E来参看。
命令:gcc -E hello.c -o hello.i
作用:将hello.c预处理输出hello.i
2:编译:这个阶段编译器主要做词法分析、语法分析、语义分析等,在检查无错误后后,把代码翻译成汇编语言。可用gcc的参数-S来参看。
编译器(ccl)将文本文件hello.i 翻译成文本文件hello.s, 它包含一个汇编语言程序。汇编语言程序中的每条语句都以一种标准的文本格式描述了
一条低级机器语言指令。
⑹ gcc编译时的-g参数是什么意思
生成调试信息。GNU 调试器可利用该信息。
⑺ linux下GCC编译器,怎么在main后面的参数中写入数字来传入数据。 比如实现 Calc + 22 22 输出 44 。
[root@liuxiting .test~]# cat test.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int a, b;
char c;
if ( argc < 3)
printf("wrong parameter \n");
else
{
a = atoi(argv[2]);
b = atoi(argv[3]);
c = *argv[1];
if ( c == '+')
{
printf("%d ", a);
printf("%c", c);//*argv[1]);
printf("%d = ",b);
printf("%d\n",a+b);
}
}
}
[root@liuxiting .test~]#gcc test.c
[root@liuxiting .test~]# ./a.out + 22 33
22 +33 = 55
也就是将取到的参数用atoi函数变成数字
⑻ 求gcc编译与链接选项参数介绍的资料
gcc --help
不用资料,在命令行里有不懂的参数或者用法可以像上面那样,[program name] --help
再详细就翻阅GNU的手册或者官网资料。
⑼ (Linux)gcc进行优化编译的参数是什么
将file.c文件编译产生可执行文件myprog(-o选项),并且在编译的时候,生成调试信息(-g信息)。让gdb调试器可以调试该程序。
gcc是编译器程序名字
-o是可执行文件名字输出参数
-g是插入调试信息参数
当然是调试可执行文件myprog
⑽ cmake中怎样设置gcc的编译参数
在configure的时候,加上–host=arm-linux,结果没有实现我们要的效果,没有将编译器从默认的 gcc改成arm-linux-gcc,编译器还是用的默认的gcc: [crifan@localhost lrzsz-0.12.20]$ CFLAGS=-O2