草庐IT

shared-libraries

全部标签

android - dlsym : undefined symbol, 安卓 N

我想在我的应用程序中从Android运行时共享库​​中读取值。从Android5开始,当引入了新的运行时并且libart.so首次出现时,我用这段代码成功地做到了:std::unique_ptrhandle{dlopen("libart.so",RTLD_NOW|RTLD_GLOBAL),&dlclose};constexprcharTHREAD_KEY_NAME[]="_ZN3art6Thread17pthread_key_self_E";key_=static_cast(dlsym(handle.get(),THREAD_KEY_NAME));LOG("Currentthread:

android - dlsym : undefined symbol, 安卓 N

我想在我的应用程序中从Android运行时共享库​​中读取值。从Android5开始,当引入了新的运行时并且libart.so首次出现时,我用这段代码成功地做到了:std::unique_ptrhandle{dlopen("libart.so",RTLD_NOW|RTLD_GLOBAL),&dlclose};constexprcharTHREAD_KEY_NAME[]="_ZN3art6Thread17pthread_key_self_E";key_=static_cast(dlsym(handle.get(),THREAD_KEY_NAME));LOG("Currentthread:

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 - 在参数 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

linux - 在运行时加载 Linux 库

我认为Linux的一个主要设计缺陷是在以二进制而非源代码形式分发程序时的共享对象hell。这是我的具体问题:我想以ELF二进制形式发布一个Linux程序,该程序应在尽可能多的发行版上运行,以便我的强制依赖性尽可能低:在任何情况下唯一需要的库是libpthread,libX11、librt和libm(当然还有glibc)。当我使用gcc构建我的程序时,我正在动态链接这些库。但是,我的程序也可以选择支持ALSA(声音接口(interface))、Xcursor、Xfixes和Xxf86vm扩展以及GTK。但是只有当它们在用户的系统上可用时才应该使用这些,否则我的程序应该仍然运行但功能有限。

linux - 在运行时加载 Linux 库

我认为Linux的一个主要设计缺陷是在以二进制而非源代码形式分发程序时的共享对象hell。这是我的具体问题:我想以ELF二进制形式发布一个Linux程序,该程序应在尽可能多的发行版上运行,以便我的强制依赖性尽可能低:在任何情况下唯一需要的库是libpthread,libX11、librt和libm(当然还有glibc)。当我使用gcc构建我的程序时,我正在动态链接这些库。但是,我的程序也可以选择支持ALSA(声音接口(interface))、Xcursor、Xfixes和Xxf86vm扩展以及GTK。但是只有当它们在用户的系统上可用时才应该使用这些,否则我的程序应该仍然运行但功能有限。

linux - 无法将应用程序与 mudflap 链接

我的应用程序使用我的共享库。应用程序和库必须是mudflapped检查堆栈和堆上的越界读取和写入。共享库已成功构建,但在链接应用程序时我遇到了很多错误。我做了一个简单的例子来重现这个问题。以下是重现步骤:使用2个文件创建C++动态共享库项目:带有一些类的h和cpp文件,在h或cpp文件中使用#include创建使用此库的C++应用程序(使用共享库中的类)建库构建应用程序(在这里你会发现一个链接错误)这是我的文件:SharedLibTest.h#ifndefSHAREDLIBTEST_H_#defineSHAREDLIBTEST_H_#includeclassSharedLibTest{

linux - 无法将应用程序与 mudflap 链接

我的应用程序使用我的共享库。应用程序和库必须是mudflapped检查堆栈和堆上的越界读取和写入。共享库已成功构建,但在链接应用程序时我遇到了很多错误。我做了一个简单的例子来重现这个问题。以下是重现步骤:使用2个文件创建C++动态共享库项目:带有一些类的h和cpp文件,在h或cpp文件中使用#include创建使用此库的C++应用程序(使用共享库中的类)建库构建应用程序(在这里你会发现一个链接错误)这是我的文件:SharedLibTest.h#ifndefSHAREDLIBTEST_H_#defineSHAREDLIBTEST_H_#includeclassSharedLibTest{