我的问题是关于使用gdb/gdbserver在嵌入式arm处理器上远程调试应用程序。我可以调试应用程序本身,但应用程序动态链接到实现内部通信协议(protocol)的共享库。我希望能够在共享库函数中设置断点,因此尝试找出一些设备发现问题。我已经确定库是用调试符号编译的,并由主机端的gdb加载,我可以列出库中的函数,甚至可以设置断点,但是一旦我尝试运行应用程序,我就会得到一个错误消息的效果:无法插入断点X。访问内存地址[Hex地址]时出错:输入/输出错误。其中X是gdb中的断点编号,[Hexaddress]是一个非常小的有效地址。我在目标和主机上都使用了新库,但是通过nfs挂载在目标上通
我的应用程序动态加载liba.so(使用dlopen)。liba.so使用libb.so所以我想将liba.so链接到libb.so。如何在Linux中执行此操作?提前致谢。 最佳答案 如果你自己构建liba.so,你需要用-l选项链接它gcc-oliba.soliba.o-L/libb/path-lb如果您没有liba源,也许您可以创建libawrapper.so链接到liba和libb并动态加载这个库gcc-olibawrap.so-L/liba/-L/libb/-la-lb 关
我的应用程序动态加载liba.so(使用dlopen)。liba.so使用libb.so所以我想将liba.so链接到libb.so。如何在Linux中执行此操作?提前致谢。 最佳答案 如果你自己构建liba.so,你需要用-l选项链接它gcc-oliba.soliba.o-L/libb/path-lb如果您没有liba源,也许您可以创建libawrapper.so链接到liba和libb并动态加载这个库gcc-olibawrap.so-L/liba/-L/libb/-la-lb 关
Ingccdoc给出了使用section的一个原因。这个原因是映射到特殊硬件。但这似乎不是我的情况。所以我给了一个任务来修改我们在项目中使用的共享库。它是一个Linux库。库中有变量声明让我感到困惑。它们看起来像这样(大致):staticintmy_var_1__attribute__((section("STACK")))=0;更新1:有十几个变量以这种方式定义(__attribute__((section("STACK"))))更新2:my_var_1不是常量。my_var_1可能会在初始化期间更改代码:my_var_1=atoi(getenv("MY_VAR_1")?getenv
Ingccdoc给出了使用section的一个原因。这个原因是映射到特殊硬件。但这似乎不是我的情况。所以我给了一个任务来修改我们在项目中使用的共享库。它是一个Linux库。库中有变量声明让我感到困惑。它们看起来像这样(大致):staticintmy_var_1__attribute__((section("STACK")))=0;更新1:有十几个变量以这种方式定义(__attribute__((section("STACK"))))更新2:my_var_1不是常量。my_var_1可能会在初始化期间更改代码:my_var_1=atoi(getenv("MY_VAR_1")?getenv
我正在尝试链接到我的C++程序中的共享库。我使用的命令:g++-oclientClient.cpp-L。-lprint错误如下:/usr/bin/ld:client:hiddensymbol`__dso_handle'in/usr/lib/gcc/i486-linux-gnu/4.4.3/crtbegin.oisreferencedbyDSO/usr/bin/ld:finallinkfailed:Nonrepresentablesectiononoutputcollect2:ldreturned1exitstatus我该如何解决这个错误? 最佳答案
我正在尝试链接到我的C++程序中的共享库。我使用的命令:g++-oclientClient.cpp-L。-lprint错误如下:/usr/bin/ld:client:hiddensymbol`__dso_handle'in/usr/lib/gcc/i486-linux-gnu/4.4.3/crtbegin.oisreferencedbyDSO/usr/bin/ld:finallinkfailed:Nonrepresentablesectiononoutputcollect2:ldreturned1exitstatus我该如何解决这个错误? 最佳答案
这是我在stackoverflow上的第一个问题,所以我会尽力做好。上下文:我想提供一个可以在每个Linux发行版上运行的程序(例如,一个将使用C++11的程序,在没有C++11库的系统上运行)。为此,我想复制我的程序使用的所有库,并将它们与可执行文件放在一个文件夹中,这样它就可以使用这些库而不是系统的库。我有2个环境要测试:-Opensuse,带有(GNUlibc)2.19-Ubuntu,带有(UbuntuEGLIBC2.17-Oubuntu5.1)2.17我在Opensuse下编译我的程序,然后在Ubuntu下运行它。该程序在使用默认库时运行良好。项目:这是main.c:intma
这是我在stackoverflow上的第一个问题,所以我会尽力做好。上下文:我想提供一个可以在每个Linux发行版上运行的程序(例如,一个将使用C++11的程序,在没有C++11库的系统上运行)。为此,我想复制我的程序使用的所有库,并将它们与可执行文件放在一个文件夹中,这样它就可以使用这些库而不是系统的库。我有2个环境要测试:-Opensuse,带有(GNUlibc)2.19-Ubuntu,带有(UbuntuEGLIBC2.17-Oubuntu5.1)2.17我在Opensuse下编译我的程序,然后在Ubuntu下运行它。该程序在使用默认库时运行良好。项目:这是main.c:intma
如果我直接使用共享库中的函数,即通过在代码中声明该函数并在编译时进行链接,则LD_PRELOAD可以正常工作。但是,如果我使用dlopen()/dlsym(),则LD_PRELOAD无效!问题是我想调试一个使用dlopen()加载某些插件的程序,并且该程序使用绝对文件名,因此仅使用LD_LIBRARY_PATH将无法工作。这是说明问题的示例代码。./libfoo.sovoidfoo(){printf("version1\n");}./preload/libfoo.sovoidfoo(){printf("version2\n");}main.c#include#includevoidfo