草庐IT

shared-libraries

全部标签

c++ - 在 Linux 上管理共享库的常用方法是什么?

比如我需要生成一个共享库libXXX.so。生成它的常用方法是什么?只使用-fPIC-shared吗?我需要创建一个到这个库的软链接(softlink)吗?我的意思是使用ln-s。如果我更新共享库会怎样,即。从libXXX.so.1.2.3到libXXX.so.1.2.4,我的项目怎么知道共享库更新了?我需要重新编译整个项目吗?在Makefile中管理共享库的常用方法是什么?我完全不明白这些问题。请帮我一个忙:-) 最佳答案 您提出问题的主题非常广泛。您的大部分问题取决于您的环境,是否创建软链接(softlink)取决于您将库保存在

C++强制卸载共享库

我正在尝试创建一个可以多次重新加载共享库的应用程序。但在某个时间点,dlmopen因错误而失败/usr/lib/libc.so.6:无法在静态TLSblock中分配内存这是重现此问题的最少代码:#include#include#includeintmain(){for(inti=0;i和空的lib.cpp,用编译g++-rdynamic-ldl-Wl,-R.-otestmain.cppg++-fPIC-sharedlib.cpp-olib.so更新似乎连一个线程都崩溃了。问题是:如何强制卸载库或销毁使用LM_ID_NEWLM创建的未使用的命名空间? 最佳答案

C++强制卸载共享库

我正在尝试创建一个可以多次重新加载共享库的应用程序。但在某个时间点,dlmopen因错误而失败/usr/lib/libc.so.6:无法在静态TLSblock中分配内存这是重现此问题的最少代码:#include#include#includeintmain(){for(inti=0;i和空的lib.cpp,用编译g++-rdynamic-ldl-Wl,-R.-otestmain.cppg++-fPIC-sharedlib.cpp-olib.so更新似乎连一个线程都崩溃了。问题是:如何强制卸载库或销毁使用LM_ID_NEWLM创建的未使用的命名空间? 最佳答案

linux - 使专有的 ELF 二进制文件在 Linux 上可移植

我正在寻找一种方法来制作现有的专有ELF二进制文件,这些二进制文件链接到特定版本的系统库,可移植。对于可移植性,我的意思是使可执行文件在具有相同处理器架构和兼容系统内核的每个系统上工作,而不必拥有库的源代码(如果没有源代码就没有办法,那也没关系).到目前为止我想到了两种可能性,但我不知道它们是否完全可能,如果是,该选择哪种:搜索所有链接库及其依赖项,并将它们包含在二进制文件的子目录中,并将库路径更改为该目录。将库静态地重新链接到二进制文件到一个大的可执行文件(如果程序不根据校验和验证自身)。许可不是问题,因为我不想分发创建的可移植程序,它仅供私有(private)使用。感谢您的回答。

linux - 使专有的 ELF 二进制文件在 Linux 上可移植

我正在寻找一种方法来制作现有的专有ELF二进制文件,这些二进制文件链接到特定版本的系统库,可移植。对于可移植性,我的意思是使可执行文件在具有相同处理器架构和兼容系统内核的每个系统上工作,而不必拥有库的源代码(如果没有源代码就没有办法,那也没关系).到目前为止我想到了两种可能性,但我不知道它们是否完全可能,如果是,该选择哪种:搜索所有链接库及其依赖项,并将它们包含在二进制文件的子目录中,并将库路径更改为该目录。将库静态地重新链接到二进制文件到一个大的可执行文件(如果程序不根据校验和验证自身)。许可不是问题,因为我不想分发创建的可移植程序,它仅供私有(private)使用。感谢您的回答。

c++ - linux系统找不到libexpat

我正在为ubuntu12.10i386使用vddk库进行开发。我经常收到以下错误:Cannotopenlibrary:libexpat.so.0:cannotopensharedobjectfile:Nosuchfileordirectory.当我运行apt-filesearchlibexpat.so它显示我正在关注lib64expat1:/usr/lib64/libexpat.so.1lib64expat1:/usr/lib64/libexpat.so.1.6.0lib64expat1-dev:/usr/lib64/libexpat.solibexpat1:/lib/i386-lin

c++ - linux系统找不到libexpat

我正在为ubuntu12.10i386使用vddk库进行开发。我经常收到以下错误:Cannotopenlibrary:libexpat.so.0:cannotopensharedobjectfile:Nosuchfileordirectory.当我运行apt-filesearchlibexpat.so它显示我正在关注lib64expat1:/usr/lib64/libexpat.so.1lib64expat1:/usr/lib64/libexpat.so.1.6.0lib64expat1-dev:/usr/lib64/libexpat.solibexpat1:/lib/i386-lin

linux - 通过 soname 插入共享对象的一部分

我已经编写了一个共享对象来修改FreeType的FT_Load_Glyph和FT_Render_Glyph函数的参数,目前通过将其插入LD_PRELOAD和dlsym。这工作正常,但我很想知道是否有办法进行这些更改:在给定主机上使用FreeType的所有程序(例如运行Debian);不破坏任何实际上未链接到FreeType的程序;无需简单地将LD_PRELOAD应用于主机上的所有程序;不需要任何维护,除非FreeType的soname被更改;和不修改FreeType的任何文件,也不修改主机上任何程序的文件。我能想出的唯一两个“解决方案”是丑陋的黑客:一直LD_PRELOAD所有程序,这

linux - 通过 soname 插入共享对象的一部分

我已经编写了一个共享对象来修改FreeType的FT_Load_Glyph和FT_Render_Glyph函数的参数,目前通过将其插入LD_PRELOAD和dlsym。这工作正常,但我很想知道是否有办法进行这些更改:在给定主机上使用FreeType的所有程序(例如运行Debian);不破坏任何实际上未链接到FreeType的程序;无需简单地将LD_PRELOAD应用于主机上的所有程序;不需要任何维护,除非FreeType的soname被更改;和不修改FreeType的任何文件,也不修改主机上任何程序的文件。我能想出的唯一两个“解决方案”是丑陋的黑客:一直LD_PRELOAD所有程序,这

linux - 为什么tomcat6在/var/lib/和/usr/share/都有文件夹?

我是Linux新手,我不明白为什么apt-getinstalltomcat6会产生两个tomcat6文件夹,一个在/var/lib/,另一个在/usr/share/。我确信这是有充分理由的,但它让我困惑了几个小时,没有任何效果。这是怎么回事? 最佳答案 Tomcat提供了一种机制,您可以在其中运行多个实例,这些实例都使用一些通用配置元素。您将使用环境变量CATALINA_HOME与CATALINA_BASE来配置tomcat(或相应的属性)。参见thisarticleforanexplanation."Thefirstpropert