首先,请记住我是Linux新手。我在编译我的项目时遇到问题。我一直收到以下错误:/usr/bin/ld:CMakeFiles/Robot.dir/source/ModuleHandler.cpp.o:undefinedreferencetosymbol'dlsym@@GLIBC_2.4'//lib/arm-linux-gnueabihf/libdl.so.2:erroraddingsymbols:DSOmissingfromcommandlinecollect2:ldreturned1exitstatus首先正确的目录是:/usr/lib/arm-linux-gnueabihf/lib
在Linux中。根据dlsym(3)Linux手册页,*SincethevalueofthesymbolcouldactuallybeNULL(sothataNULLreturnfromdlsym()neednotindicateanerror),*这是为什么,什么时候一个符号(特别是对于一个函数)实际上可以为NULL?我正在审查代码,发现一段使用dlerror首先清理,然后使用dlsym,然后使用dlerror检查错误。但它在调用之前不会检查结果函数是否为null:dlerror();a_func_name=...dlsym(...);if(dlerror())gotoend;a_f
在Linux中。根据dlsym(3)Linux手册页,*SincethevalueofthesymbolcouldactuallybeNULL(sothataNULLreturnfromdlsym()neednotindicateanerror),*这是为什么,什么时候一个符号(特别是对于一个函数)实际上可以为NULL?我正在审查代码,发现一段使用dlerror首先清理,然后使用dlsym,然后使用dlerror检查错误。但它在调用之前不会检查结果函数是否为null:dlerror();a_func_name=...dlsym(...);if(dlerror())gotoend;a_f
我正在使用dlsym在我的程序中查找符号,但它总是返回NULL,这出乎我的意料。根据联机帮助页,如果出现某种错误或者符号确实为NULL,dlsym可能会返回NULL。就我而言,我遇到了一个错误。我将向您展示我今晚制作的MCVE。这是instr.c的内容:#includevoid*testing(inti){printf("Youcalledtesting(%d)\n",i);return0;}一个非常简单的东西,只包含一个不起眼的示例函数。这里是test.c的内容:#include#include#includetypedefvoid*(*dltest)(int);intmain(in
我正在使用dlsym在我的程序中查找符号,但它总是返回NULL,这出乎我的意料。根据联机帮助页,如果出现某种错误或者符号确实为NULL,dlsym可能会返回NULL。就我而言,我遇到了一个错误。我将向您展示我今晚制作的MCVE。这是instr.c的内容:#includevoid*testing(inti){printf("Youcalledtesting(%d)\n",i);return0;}一个非常简单的东西,只包含一个不起眼的示例函数。这里是test.c的内容:#include#include#includetypedefvoid*(*dltest)(int);intmain(in
我正在使用arm-linux-gnueabi-g++版本4.7.3进行编译。我在以下位置安装了arm-linux-gnueabi库:/usr/arm-linux-gnueabi/lib,itcontainslibdl.a,libdl.so,libdl.so.2,andlibdl-2.19.so.libdl.so链接到libdl.so.2,后者链接到libdl-2.19.so。我正在尝试链接到dl库(请参阅下面的命令字符串),但我总是遇到undefinedreference错误。arm-linux-gnueabi-g++-I.-I../-I../Comms/Linux-Wall-DLIN
我正在使用arm-linux-gnueabi-g++版本4.7.3进行编译。我在以下位置安装了arm-linux-gnueabi库:/usr/arm-linux-gnueabi/lib,itcontainslibdl.a,libdl.so,libdl.so.2,andlibdl-2.19.so.libdl.so链接到libdl.so.2,后者链接到libdl-2.19.so。我正在尝试链接到dl库(请参阅下面的命令字符串),但我总是遇到undefinedreference错误。arm-linux-gnueabi-g++-I.-I../-I../Comms/Linux-Wall-DLIN
我目前正在做一个项目,我需要跟踪几个系统调用和低级函数的使用情况,比如mmap、brk、sbrk。到目前为止,我一直在使用函数插入来执行此操作:我编写了一个与我要替换的函数同名的包装函数(例如mmap),然后将它加载到程序中设置LD_PRELOAD环境变量。我通过使用dlsym加载的指针调用实际函数。不幸的是,我想要包装的函数之一sbrk被dlsym内部使用,所以当我尝试加载符号时程序崩溃了。sbrk在Linux中不是系统调用,所以我不能简单地使用syscall来间接调用它。所以我的问题是,如何在不使用dlsym的情况下从同名包装函数调用库函数?是否有任何编译器技巧(使用gcc)可以让
我目前正在做一个项目,我需要跟踪几个系统调用和低级函数的使用情况,比如mmap、brk、sbrk。到目前为止,我一直在使用函数插入来执行此操作:我编写了一个与我要替换的函数同名的包装函数(例如mmap),然后将它加载到程序中设置LD_PRELOAD环境变量。我通过使用dlsym加载的指针调用实际函数。不幸的是,我想要包装的函数之一sbrk被dlsym内部使用,所以当我尝试加载符号时程序崩溃了。sbrk在Linux中不是系统调用,所以我不能简单地使用syscall来间接调用它。所以我的问题是,如何在不使用dlsym的情况下从同名包装函数调用库函数?是否有任何编译器技巧(使用gcc)可以让
当我尝试运行我只有执行权限的脚本时出现以下错误:uname:符号查找错误:/home/dumindara/random/sotest/a.out:undefinedsymbol:dlsym这是在我将LD_PRELOAD环境变量设置为/home/dumindara/random/sotest/a.out之后。a.out有一个测试malloc函数,内部调用dlsym。我在运行ls时没有遇到这个问题。大多数进程确实给出了这个错误。为什么会发生这种情况,我该怎么做才能让它发挥作用? 最佳答案 我无法对已接受的答案发表评论,但值得一提的是,当