我下载了linux gcc的源代码后,我想查看各个函数的源代码,但是不知到如何下手,有没有那个大牛给点帮助。

我下载了linux gcc的源代码后,我想查看各个函数的源代码,但是不知到如何下手,有没有那个大牛给点帮助。,第1张

只是写程序的话,就不是你这么 *** 作的,建议你看下《LinuxC函数实例速查手册》

或者《Linux 常用C函数 》这类型的书吧,有详细的基本函数的介绍,比你看头文件要轻松的多了。但你要是想知道C库函数怎么实现的话,倒是可以看看源码,对自己的程序设计还是有帮助的。

#include <stdioh>

#include <stdlibh>

int main(void)

{

printf("Hello~~\n");

return 0;

}

编译方式

gcc 源文件名 -o 目标文件名 -Wall

Eg:

gcc 1c -o demo -Wall

运行

/demo

就能看到打印了。

有啥问题可以继续沟通~~~

另外不知道函数的声明和用法可以在Linux用man命令查看例如

man printf

就能看到具体的声明和简单的用法。当然,man不能查看所有的函数。最万能的办法就是求助万能的google和baidu,比你直接找源码要快的多。

C++类型推导,通常使用的是auto、decltype关键字来进行类型推导的,从而简化代码,方便编程,但是在获取方便的同时,我们需要对这些关键字有一些深入的了解。

一、获取函数的签名

__FUNCSIG__是MSVC下获取函数签名的宏,__PRETTY_FUNCTION__是GCC下获取函数签名的宏。

使用一个例子来测试获取函数的签名

二、类型推导 - auto、decltype

1、构建一个int类型,一个const int类型,一个int&类型,一个const int& 类型。

为什么会出现const int& is reference,not const这种结果呢?

我通过查找资料,明白了为什么会出现这种现象,原因如下:

引用的const 限定符仅仅意味着不能通过引用参数修改值,但是它仍然可以被其他方法修改。

例子如下:

所以我们不能假设const引用的值实际上是常数。

2、我们使用auto来推导上述类型

decltype(i) k = 10; decltype(i) 推导i的类型,从上面的代码所知,i的类型为int,所以decltype(i)推导出i的类型为int,即上述代码为 int k = 10;

3、我们使用decltype(auto)来推导上述类型

为什么使用auto推断类型和使用decltype(auto)推断类型会有不同的结果,通过查阅资料发现auto与decltype(auto)是有一定的区别于联系的。

auto在表示类型时不会附带等号右侧类型的 ‘ & ’、‘ ’ 以及顶层const,而decltype会附带表达式的 ‘ & ’、‘ ’ 以及顶层const;

auto在遇到数组时,编译器会将其替换为一个指向数组首元素的指针,但是decltype不会;

以上是我对C++类型推导的一些理解,欢迎大家评论。

一、Linux程序gcc编译步骤:

Gcc编译过程主要的4个阶段:

l 预处理阶段,完成宏定义和include文件展开等工作;(i)

l 根据编译参数进行不同程度的优化,编译成汇编代码(sS)

l 用汇编器把汇编代码进一步生成目标代码(o)

l 用连接器把生成的目标代码和系统或用户提供的库连接起来,生成可执行文件

格式:

l gcc -E testc//预处理阶段

l Gcc -S testc//编译阶段

l Gcc -c testc//汇编阶段

l Gcc -o test testc//链接阶段

二、Linux程序gdb调试步骤:

Gdb的功能:

l 设置断点

l 监视程序变量的值

l 程序的单步执行

l 显示、修改变量的值

l 显示、修改寄存器

l 查看程序的堆栈情况

l 远程调试

Gdb调试过程:

1、程序经过预处理后,即进入编译阶段,进入编译阶段,首先声明编译:

2、格式:gdb -o test testc -g

3、进入编译:gdb test

4、显示需要编译调试的源程序:l(list)//list filename

5、设置断点:b(break)行号

6、查看设置的断点:info b

7、运行调试程序:run

8、跳到下一个断点:c(continue)

9、单步运行的话使用:n(next)/s(step into)跳到函数体 //区别在与:next执行函数体,而step不执行函数体

10、调试过程中查看某个变量的变化:print i (每次都要手动设置)//display i(设置一次一直尾随,直到用“undisplay 变量标号” 停止)

11、退出当前的调试使用finish 跳出函数

12、清楚断点 clear 行号

13、Delete 断点信息序号// 删除所有断点或设置的要删除的断点

14、退出调试 q

15、b num if i==20 设置断点的触发条件

16、condition num i==50 改变断点的触发条件

1、选择"project">,"propertise">,"C/C++Build">,C/C++Build的下拉菜单"Settings"选项>。

2、Settings的"ToolSettings"选项卡>,ToolSettings选项卡下的"GCCCLlinker"选项>,GCCCLinker选项下的"Librarie“选项。

man 可比msdn好用多了

man 3 sleep (如果直接 man sleep ,查看的是 sleep 这个命令的手册,而不是sleep()函数的手册,你的问题应该就是由于这个导致的看错文档导致的)

就可以看到如下的说明,它明确的告诉了你需要 #include <unistdh>,还提供了其他详细说明。

SLEEP(3) Linux Programmer's Manual SLEEP(3)

NAME

sleep - Sleep for the specified number of seconds

SYNOPSIS

#include <unistdh>

unsigned int sleep(unsigned int seconds);

DESCRIPTION

sleep() makes the calling thread sleep until seconds seconds have

elapsed or a signal arrives which is not ignored

RETURN VALUE

Zero if the requested time has elapsed, or the number of seconds left

to sleep, if the call was interrupted by a signal handler

CONFORMING TO

POSIX1-2001

BUGS

sleep() may be implemented using SIGALRM; mixing calls to alarm(2) and

sleep() is a bad idea

Using longjmp(3) from a signal handler or modifying the handling of

SIGALRM while sleeping will cause undefined results

SEE ALSO

alarm(2), nanosleep(2), signal(2), signal(7)

COLOPHON

This page is part of release 325 of the Linux man-pages project A

description of the project, and information about reporting bugs, can

be found at >

不用特定的扩展名,且不是在 gcc 中指定参数,而是在 ld 中。写一个导出符号文件,如 symbol 指定你只导出的函数,如 func1。使用 ld 的--retain-symbols-file 参数可以在 static section 里取消 func1 以外的所有函数。这时你用 readelf 看编译好后的 。so 文件 static section 里没有了,使用 nm 看。so文件它无法查出导出函数。但这并不完全。因为在 dynamic section 里还是会看到所有符号被导出。如果想在 。dynsym 这个 section 里也不让他导出的话,需要再编写一个 script 文件。 指定 global 与 local 在 global 中指定你要导出的函数,简单的格式如下:{global: 导出函数名;local: ;};再在ld 时用 --version-script 选项来 load 你 文件。都完事后再使用 readelf 观察static 与 dynamic section 发现只导出了你指定的函数名即符号。例:ld -shared --retain-symbols-file 符号文件 --version-script 脚本文件 -o 动态库文件。so filename。o

以上就是关于我下载了linux gcc的源代码后,我想查看各个函数的源代码,但是不知到如何下手,有没有那个大牛给点帮助。全部的内容,包括:我下载了linux gcc的源代码后,我想查看各个函数的源代码,但是不知到如何下手,有没有那个大牛给点帮助。、现代C++ 类型推导、怎样调试GCC源码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9646820.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存