草庐IT

c - -rdynamic 仅用于选择符号?

场景:可执行文件在运行时通过dlopen加载共享对象。共享对象引用了一些实际编译到主可执行文件中的符号(函数)。如果我在链接可执行文件时将-rdynamic添加到gcc,则效果很好。-rdynamic导出可执行文件的所有非静态符号。我的共享对象只需要选定的几个。问题:有没有办法实现-rdynamic的效果,但限制了我知道我的共享对象需要的几个选择符号?编辑:至少有两个人误解了这个问题,所以我试着澄清一下:这个问题是关于从主可执行文件中导出一个符号。这个问题不是关于从动态库导出符号。这是一个最小的例子:func.h,公共(public)头文件#includevoidfunc(void);

c - -rdynamic 仅用于选择符号?

场景:可执行文件在运行时通过dlopen加载共享对象。共享对象引用了一些实际编译到主可执行文件中的符号(函数)。如果我在链接可执行文件时将-rdynamic添加到gcc,则效果很好。-rdynamic导出可执行文件的所有非静态符号。我的共享对象只需要选定的几个。问题:有没有办法实现-rdynamic的效果,但限制了我知道我的共享对象需要的几个选择符号?编辑:至少有两个人误解了这个问题,所以我试着澄清一下:这个问题是关于从主可执行文件中导出一个符号。这个问题不是关于从动态库导出符号。这是一个最小的例子:func.h,公共(public)头文件#includevoidfunc(void);

c++ - C/C++ 动态链接库重载

在我的项目中,我需要修改glibc源代码的一些功能。我只需要修改pthread的一部分。比如我在源码中修改了pthread_create.c或者pthread_mutex_lock.c等多线程相关函数。然后,当我的具体程序运行时,我想指定它在需要使用这些功能时使用修改后的功能,并且不会影响其他功能。另外,我不想指定整个版本的glibc当程序正在运行。我需要寻求你的帮助这个问题有什么好的解决方案吗?谢谢!!叮 最佳答案 这是共享库插入器的工作。Here是一篇优秀的文章。如果函数在共享库中,则可以指示运行时链接器调用另一个“插入”函数。

c++ - C/C++ 动态链接库重载

在我的项目中,我需要修改glibc源代码的一些功能。我只需要修改pthread的一部分。比如我在源码中修改了pthread_create.c或者pthread_mutex_lock.c等多线程相关函数。然后,当我的具体程序运行时,我想指定它在需要使用这些功能时使用修改后的功能,并且不会影响其他功能。另外,我不想指定整个版本的glibc当程序正在运行。我需要寻求你的帮助这个问题有什么好的解决方案吗?谢谢!!叮 最佳答案 这是共享库插入器的工作。Here是一篇优秀的文章。如果函数在共享库中,则可以指示运行时链接器调用另一个“插入”函数。

c - 在C中制作一个多架构静态库

我在Ubuntu上工作,我已经按照thissite上的说明制作了一个静态C库.但是生成的.a包只能在编译它的机器上运行。我知道.a存档包含目标文件(在我的例子中只有一个),所以,我能否以某种方式将在不同机器(i386和amd64)中编译的目标文件打包在一起,以便GCC可以知道应该使用哪个文件?如果我不能,至少可以让我的库被其他同架构机器识别吗?(使用-L.-llibraryname)例子:存档名称“libvisualt64.a”命令:gcc-omainmain.c-L。-lvisualt64说:skippingincompatible./libvisualt.awhensearchin

c - 在C中制作一个多架构静态库

我在Ubuntu上工作,我已经按照thissite上的说明制作了一个静态C库.但是生成的.a包只能在编译它的机器上运行。我知道.a存档包含目标文件(在我的例子中只有一个),所以,我能否以某种方式将在不同机器(i386和amd64)中编译的目标文件打包在一起,以便GCC可以知道应该使用哪个文件?如果我不能,至少可以让我的库被其他同架构机器识别吗?(使用-L.-llibraryname)例子:存档名称“libvisualt64.a”命令:gcc-omainmain.c-L。-lvisualt64说:skippingincompatible./libvisualt.awhensearchin

c - 在参数 typedef 更改时重建动态库

假设,我有一个C结构,DynApiArg_t。typedefstructDynApiArg_s{uint32_tm1;...uint32_tmx;}DynApiArg_t;这个结构的指针作为参数传递给函数sayvoidDynLibApi(DynApiArg_t*arg){arg->m1=0;another_fn_in_the_lib(arg->mold);/*Maycrashhere.(1)*/}存在于动态库libdyn.so中。此API通过dlopen/dlsym调用过程从可执行文件调用。如果此动态库更新到版本2,其中DynApiArg_t现在有新成员,比如m2,如下所示:typed

c - 在参数 typedef 更改时重建动态库

假设,我有一个C结构,DynApiArg_t。typedefstructDynApiArg_s{uint32_tm1;...uint32_tmx;}DynApiArg_t;这个结构的指针作为参数传递给函数sayvoidDynLibApi(DynApiArg_t*arg){arg->m1=0;another_fn_in_the_lib(arg->mold);/*Maycrashhere.(1)*/}存在于动态库libdyn.so中。此API通过dlopen/dlsym调用过程从可执行文件调用。如果此动态库更新到版本2,其中DynApiArg_t现在有新成员,比如m2,如下所示:typed

c - Gdb 函数入口点未知

我正在使用供应商API,我拥有其源代码,我可以设置断点并且它们命中率很高,但是如果我尝试在gdb中调用一个函数(按其名称),它会显示“入口点地址未知”。,这是什么意思,有什么解决方法吗?我试过谷歌搜索,但没有找到任何有用的东西。非常感谢您的帮助。下一步我想使用objdump获取函数的地址,然后尝试直接调用地址,如果它有效。但是我不知Prop体怎么做,也请在这里指导我,供应商库是动态链接到我自己的程序的编辑1:在执行“信息地址“函数””之后,我尝试调用类似“调用(*“地址”)(参数)”,它仍然显示相同的错误,请注意它确实知道函数地址。 最佳答案

c - Gdb 函数入口点未知

我正在使用供应商API,我拥有其源代码,我可以设置断点并且它们命中率很高,但是如果我尝试在gdb中调用一个函数(按其名称),它会显示“入口点地址未知”。,这是什么意思,有什么解决方法吗?我试过谷歌搜索,但没有找到任何有用的东西。非常感谢您的帮助。下一步我想使用objdump获取函数的地址,然后尝试直接调用地址,如果它有效。但是我不知Prop体怎么做,也请在这里指导我,供应商库是动态链接到我自己的程序的编辑1:在执行“信息地址“函数””之后,我尝试调用类似“调用(*“地址”)(参数)”,它仍然显示相同的错误,请注意它确实知道函数地址。 最佳答案