草庐IT

c++ - 以编程方式获取共享库中的函数名称

当我使用dl_open()时,我能否以编程方式从共享库(仅限Linux)中获取所有函数名称的列表?我想要这样的东西:std::vectorlist_all_functions(void*dl){//...whatcanIdohere?}intmain(){void*dl=dl_open("./mylib.so",RTLD_NOW);autofunctions=list_all_functions(dl);//...dl_close(dl);return0;}示例库(mylib.so)标题(.h):extern"C"{intsum(inta,intb);}来源(.c):intsum(in

c++ - 以编程方式获取共享库中的函数名称

当我使用dl_open()时,我能否以编程方式从共享库(仅限Linux)中获取所有函数名称的列表?我想要这样的东西:std::vectorlist_all_functions(void*dl){//...whatcanIdohere?}intmain(){void*dl=dl_open("./mylib.so",RTLD_NOW);autofunctions=list_all_functions(dl);//...dl_close(dl);return0;}示例库(mylib.so)标题(.h):extern"C"{intsum(inta,intb);}来源(.c):intsum(in

使用 GNU 工具链 (gcc/ld) 从静态库创建共享库

我在从静态库生成共享对象时遇到问题。虽然我知道还有其他选择,但我现在对为什么它不起作用以及如何让它起作用感到困扰(而不是陷入困境)。下面是我正在使用的非常简单的源代码。get_zero.c#include"get_zero.h"intget_zero(void){return0;}get_zero.hintget_zero(void);主.c#include#include#include"get_zero.h"intmain(void){returnget_zero();}目标是使用libget_zero_static和libget_zero_shared创建两个功能相同的应用程序。

使用 GNU 工具链 (gcc/ld) 从静态库创建共享库

我在从静态库生成共享对象时遇到问题。虽然我知道还有其他选择,但我现在对为什么它不起作用以及如何让它起作用感到困扰(而不是陷入困境)。下面是我正在使用的非常简单的源代码。get_zero.c#include"get_zero.h"intget_zero(void){return0;}get_zero.hintget_zero(void);主.c#include#include#include"get_zero.h"intmain(void){returnget_zero();}目标是使用libget_zero_static和libget_zero_shared创建两个功能相同的应用程序。

我可以让 valgrind 忽略 glibc 库吗?

是否可以告诉valgrind忽略某些库集?特别是glibc库..实际问题:我有一些代码在正常执行时运行良好。无泄漏等当我尝试通过valgrind运行它时,我得到核心转储并且程序重新启动/停止。Core通常指向glibc函数(通常是fseek、mutex等)。我了解不兼容的glibc/valgrind版本可能存在一些问题。我尝试了各种valgrind版本和glibc版本,但没有成功。有什么建议么? 最佳答案 这可能不会回答您的问题,但会为您提供如何抑制某些错误的细节(其他人已经提到但没有详细描述):首先,运行valgrind如下:va

我可以让 valgrind 忽略 glibc 库吗?

是否可以告诉valgrind忽略某些库集?特别是glibc库..实际问题:我有一些代码在正常执行时运行良好。无泄漏等当我尝试通过valgrind运行它时,我得到核心转储并且程序重新启动/停止。Core通常指向glibc函数(通常是fseek、mutex等)。我了解不兼容的glibc/valgrind版本可能存在一些问题。我尝试了各种valgrind版本和glibc版本,但没有成功。有什么建议么? 最佳答案 这可能不会回答您的问题,但会为您提供如何抑制某些错误的细节(其他人已经提到但没有详细描述):首先,运行valgrind如下:va

c - 过程关联表和全局偏移表

我正在阅读thisarticleonPLT(ProcessLinkageTable)andGOT(GlobalOffsetTable).虽然PLT的目的对我来说很清楚,但我仍然对GOT感到困惑。我从这篇文章中了解到,只有在共享库中声明为extern的变量才需要GOT。对于在共享库代码中声明为static的全局变量,则不需要。我的理解是正确的,还是我完全没有理解这一点。 最佳答案 也许您对extern的含义感到困惑。由于默认链接是extern,因此在函数作用域外声明的任何没有static关键字的变量都是extern。之所以需要GOT,

c - 过程关联表和全局偏移表

我正在阅读thisarticleonPLT(ProcessLinkageTable)andGOT(GlobalOffsetTable).虽然PLT的目的对我来说很清楚,但我仍然对GOT感到困惑。我从这篇文章中了解到,只有在共享库中声明为extern的变量才需要GOT。对于在共享库代码中声明为static的全局变量,则不需要。我的理解是正确的,还是我完全没有理解这一点。 最佳答案 也许您对extern的含义感到困惑。由于默认链接是extern,因此在函数作用域外声明的任何没有static关键字的变量都是extern。之所以需要GOT,

c - 用 C 在 Linux 上发出哔哔声

我想使用系统蜂鸣器(如果蜂鸣器不可用/无法访问,则仅使用扬声器)生成具有特定频率和长度的蜂鸣声(针对不同的声音信号)。我知道可以通过使用ioctl来执行此操作,但这需要root访问权限,而我不想这样做。我知道我可以只使用“哔”命令,但那将是一个依赖项,如果可能的话,不应使用(根本没有外部依赖项,只有基本的linux库和C)。我目前拥有的是以下代码(但这需要super用户权限才能运行):#include#include#includeintmain(intargc,char*argv[]){intfd=open("/dev/console",O_RDONLY);if(fd==-1||ar

c - 用 C 在 Linux 上发出哔哔声

我想使用系统蜂鸣器(如果蜂鸣器不可用/无法访问,则仅使用扬声器)生成具有特定频率和长度的蜂鸣声(针对不同的声音信号)。我知道可以通过使用ioctl来执行此操作,但这需要root访问权限,而我不想这样做。我知道我可以只使用“哔”命令,但那将是一个依赖项,如果可能的话,不应使用(根本没有外部依赖项,只有基本的linux库和C)。我目前拥有的是以下代码(但这需要super用户权限才能运行):#include#include#includeintmain(intargc,char*argv[]){intfd=open("/dev/console",O_RDONLY);if(fd==-1||ar