我正在使用linuxelf文件。我想检测给定的elf程序是静态链接的(完全静态链接,ldd表示“不是动态可执行文件”)还是动态链接的。ELF适用于嵌入式Linux,所以我不能直接运行它或使用ldd实用程序。我想通过读取和检查一些字节完全在我的程序中完成此操作。我不想依赖file实用程序或libelf、binutils等。哪些字节会不同? 最佳答案 如何使用ldd.c来自μClibc?如果你愿意,应该很容易去掉任何不需要的依赖项/检查。我认为这是一种比试图通过阅读man5elf找出所有极端情况更聪明的方法,尽管FWIW它看起来只是检查
我们在嵌入式系统上使用linux,该系统具有用于各种shell命令的busybox1.20.2。我们遇到了一个非常奇怪的问题,因为env现在确实显示了LD_LIBRARY_PATH的值:$exportLD_LIBRARY_PAT=/usr/bin$exportLD_LIBRARY_PATH=/usr/bin$exportLD_LIBRARY_PATH1=/usr/bin$env|sortENV=/etc/profile.environmentHISTFILE=/tmp/.ash_history.debug.357HOME=/home/debugLD_LIBRARY_PAT=/usr/b
我们在嵌入式系统上使用linux,该系统具有用于各种shell命令的busybox1.20.2。我们遇到了一个非常奇怪的问题,因为env现在确实显示了LD_LIBRARY_PATH的值:$exportLD_LIBRARY_PAT=/usr/bin$exportLD_LIBRARY_PATH=/usr/bin$exportLD_LIBRARY_PATH1=/usr/bin$env|sortENV=/etc/profile.environmentHISTFILE=/tmp/.ash_history.debug.357HOME=/home/debugLD_LIBRARY_PAT=/usr/b
假设您有一个程序使用dlopen()加载多个共享对象/动态库。给定一个指向全局对象(例如静态成员变量)的指针,是否可以确定该指针分配在哪个库的边界? 最佳答案 您可以使用文件/proc/self/maps解析进程映射并查看指针地址的边界,全局变量将位于.data中或.bss段。示例库lib.c:staticintobject;int*dummy(void){return&object;}test.c,为简单起见未处理的错误:#include#include#include#include#include#includestaticv
假设您有一个程序使用dlopen()加载多个共享对象/动态库。给定一个指向全局对象(例如静态成员变量)的指针,是否可以确定该指针分配在哪个库的边界? 最佳答案 您可以使用文件/proc/self/maps解析进程映射并查看指针地址的边界,全局变量将位于.data中或.bss段。示例库lib.c:staticintobject;int*dummy(void){return&object;}test.c,为简单起见未处理的错误:#include#include#include#include#include#includestaticv
对标题感到抱歉,真的想不出其他任何东西来描述这个问题:)好的,事情是这样的:我正在尝试在Linux下使用专有的免费软件应用程序(因此出现了问题;如果我有源代码,我可以重建它)。此外,我试图在不受支持的Linux版本上运行它,并且应用程序的几乎所有组件都单独工作,但不能一起工作(如果应用程序完全运行,它们应该如此)。让我澄清一下。有一个GUI,可以在不受支持的操作系统中正常启动。然后,从这个GUI中,您可以调用一堆命令行工具-有用的是,GUI还会吐出在每种情况下调用的命令行。现在,从GUI调用其中一些命令失败了-然而,因为我调用了实际的命令行(假设:“extprogram-arg11-a
对标题感到抱歉,真的想不出其他任何东西来描述这个问题:)好的,事情是这样的:我正在尝试在Linux下使用专有的免费软件应用程序(因此出现了问题;如果我有源代码,我可以重建它)。此外,我试图在不受支持的Linux版本上运行它,并且应用程序的几乎所有组件都单独工作,但不能一起工作(如果应用程序完全运行,它们应该如此)。让我澄清一下。有一个GUI,可以在不受支持的操作系统中正常启动。然后,从这个GUI中,您可以调用一堆命令行工具-有用的是,GUI还会吐出在每种情况下调用的命令行。现在,从GUI调用其中一些命令失败了-然而,因为我调用了实际的命令行(假设:“extprogram-arg11-a
我刚刚偶然发现了一些奇怪的行为:在我启动我的应用程序之前,我将LD_LIBRARY_PATH设置为某个包含所有需要的库的本地库目录。启动后,我有一部分(大部分)库是从LD_LIBRARY_PATH加载的,但有一些是从标准/usr/lib(例如/usr/lib/libQtNetwork.so.4、/usr/lib/libSM.so.6).所有这些库都包含在LD_LIBRARY_PATH中列出的目录中。谁能解释为什么我有这种行为?我对Linux世界不是很熟悉,但是thisarticle说我的方法应该有效附言如果我将/usr/libs重命名为其他名称,我将运行我的应用程序,并使用从我的库位置
我刚刚偶然发现了一些奇怪的行为:在我启动我的应用程序之前,我将LD_LIBRARY_PATH设置为某个包含所有需要的库的本地库目录。启动后,我有一部分(大部分)库是从LD_LIBRARY_PATH加载的,但有一些是从标准/usr/lib(例如/usr/lib/libQtNetwork.so.4、/usr/lib/libSM.so.6).所有这些库都包含在LD_LIBRARY_PATH中列出的目录中。谁能解释为什么我有这种行为?我对Linux世界不是很熟悉,但是thisarticle说我的方法应该有效附言如果我将/usr/libs重命名为其他名称,我将运行我的应用程序,并使用从我的库位置
当使用Androidx86工具链调试链接错误(undefinedreferenceto_dso_handle)时,我注意到它正在静态链接crtbegin_dynamic.o。这个文件的用途是什么?在包含缺失符号(_dso_handle)的工具链安装目录中还有另一个类似的crtbegin.o。crtbegin.o和crtbegin_dynamic.o有什么区别? 最佳答案 C++具有全局构造函数和析构函数。crtbegin.o和crtend.o处理调用那些构造函数和析构函数。crtbegin.o的变体(例如crtbeginS.o)对其