我想打开一个共享对象作为数据文件并对其执行验证检查。验证是签名检查,我在共享对象上签名。如果验证成功,我想加载当前打开的共享对象作为一个合适的共享对象。第一个问题:是否可以在签名检查期间调用dlopen并将共享对象作为数据文件加载,从而不执行代码?根据手册页,我不这么认为,因为我没有看到类似于RTLD_DATA的标志。因为我将共享对象作为数据文件打开,所以我有可用的描述符。验证成功后,我想将描述符传递给dlopen,以便动态加载程序正确加载共享对象。我不想关闭文件然后通过dlopen重新打开它,因为它可能会引入竞争条件(验证的文件与打开和执行的文件不同)。第二个问题:如何使用文件描述符
我想打开一个共享对象作为数据文件并对其执行验证检查。验证是签名检查,我在共享对象上签名。如果验证成功,我想加载当前打开的共享对象作为一个合适的共享对象。第一个问题:是否可以在签名检查期间调用dlopen并将共享对象作为数据文件加载,从而不执行代码?根据手册页,我不这么认为,因为我没有看到类似于RTLD_DATA的标志。因为我将共享对象作为数据文件打开,所以我有可用的描述符。验证成功后,我想将描述符传递给dlopen,以便动态加载程序正确加载共享对象。我不想关闭文件然后通过dlopen重新打开它,因为它可能会引入竞争条件(验证的文件与打开和执行的文件不同)。第二个问题:如何使用文件描述符
我正在构建一个从应用程序(我无法控制)加载的共享库。我的库使用其他共享库,而这些共享库又使用其他共享库,复杂但并不罕见。问题是主应用程序的功能存在于链中更下游的库之一中,更具体地说是openLDAP反过来使用openSSL功能:Mainapp->Mylibrary->openLDAPlibraries->openSSLlibraries我的猜测是主应用程序正在通过静态链接或简单的源代码复制/粘贴来实现openSSL。我的问题是:我可以控制openLDAP从我的库中使用哪些函数,还是我必须重新编译openLDAP并静态链接到openSSL?由于安全问题,openSSL更新得相当频繁,如果
我正在构建一个从应用程序(我无法控制)加载的共享库。我的库使用其他共享库,而这些共享库又使用其他共享库,复杂但并不罕见。问题是主应用程序的功能存在于链中更下游的库之一中,更具体地说是openLDAP反过来使用openSSL功能:Mainapp->Mylibrary->openLDAPlibraries->openSSLlibraries我的猜测是主应用程序正在通过静态链接或简单的源代码复制/粘贴来实现openSSL。我的问题是:我可以控制openLDAP从我的库中使用哪些函数,还是我必须重新编译openLDAP并静态链接到openSSL?由于安全问题,openSSL更新得相当频繁,如果
我想在Linux的可执行文件中对库的路径进行硬编码。在OSX上,这是通过在构建库时在-o参数后提供完整路径来实现的。例如,我在OSX上构建了一个这样的库:ccfoo.c--shared-o/home/sander/libfoo.so当我构建一个与此库链接的名为“bar”的可执行文件时,我在可执行文件上使用otool-L,我得到以下输出:bar:/home/sander/libfoo.so(compatibilityversion0.0.0,currentversion0.0.0)我现在可以从任何地方运行这个可执行文件,而且它总是能够找到库。我正在使用gcc在Linux上寻找等效的功能。
我想在Linux的可执行文件中对库的路径进行硬编码。在OSX上,这是通过在构建库时在-o参数后提供完整路径来实现的。例如,我在OSX上构建了一个这样的库:ccfoo.c--shared-o/home/sander/libfoo.so当我构建一个与此库链接的名为“bar”的可执行文件时,我在可执行文件上使用otool-L,我得到以下输出:bar:/home/sander/libfoo.so(compatibilityversion0.0.0,currentversion0.0.0)我现在可以从任何地方运行这个可执行文件,而且它总是能够找到库。我正在使用gcc在Linux上寻找等效的功能。
我使用linuxbrew创建了一个使用独立构建树构建的共享库,由于依赖冲突,它无法加载到父应用程序中。我正在使用一个单独的应用程序,它在使用Qt5QLibrary类启动后动态加载库。我的库是libv_repExtPluginSkeleton.so。它和父应用程序都依赖于glibc和libstdc++。所有主要应用程序的依赖项都在/usr/lib中,而我的所有库的依赖项都在~/.linuxbrew/lib中。当父应用程序加载.so失败时,我用LD_DEBUG=all"$dirname/$appname"调试失败,并在中找到以下错误报告输出:2610:file=/home/hbr/V-RE
我使用linuxbrew创建了一个使用独立构建树构建的共享库,由于依赖冲突,它无法加载到父应用程序中。我正在使用一个单独的应用程序,它在使用Qt5QLibrary类启动后动态加载库。我的库是libv_repExtPluginSkeleton.so。它和父应用程序都依赖于glibc和libstdc++。所有主要应用程序的依赖项都在/usr/lib中,而我的所有库的依赖项都在~/.linuxbrew/lib中。当父应用程序加载.so失败时,我用LD_DEBUG=all"$dirname/$appname"调试失败,并在中找到以下错误报告输出:2610:file=/home/hbr/V-RE
我正在尝试在Linux系统上编译/链接一个非常的旧软件,但出于某种原因我无法链接到我系统上安装的共享库。我从链接器收到以下错误:/usr/bin/ld:cannotfind-lXaw但是,lib本身已安装。如果我跑ldconfig-v|greplibXaw我得到(除其他外)这个点击:libXaw.so.7->libXaw7.so.7.0.0库和它的链接在/usr/libbtw中。所以没什么特别的。所以库就在那里,ldconfig找到了它。什么会导致ld在链接时找不到库?正如您可能已经猜到的那样,我对共享库的东西还很陌生。有什么想法吗? 最佳答案
我正在尝试在Linux系统上编译/链接一个非常的旧软件,但出于某种原因我无法链接到我系统上安装的共享库。我从链接器收到以下错误:/usr/bin/ld:cannotfind-lXaw但是,lib本身已安装。如果我跑ldconfig-v|greplibXaw我得到(除其他外)这个点击:libXaw.so.7->libXaw7.so.7.0.0库和它的链接在/usr/libbtw中。所以没什么特别的。所以库就在那里,ldconfig找到了它。什么会导致ld在链接时找不到库?正如您可能已经猜到的那样,我对共享库的东西还很陌生。有什么想法吗? 最佳答案