使用GCC,如何在创建共享对象后从共享对象中删除符号?如果我在C中有三个文件操作符号foo()喜欢://a.cintfoo(){return0xdead;}intbaz(){return1;}和//b.cintfoo(){return0xbeef;}intbar(){return0;}和//c.c#include"stdio.h"externintfoo();externintbar();externintbaz();intmain(){printf("0x%x,0x%x,0x%x\n",foo(),bar(),baz());return0;}然后我编译并运行如下:%gcca.c--s
我正在使用libmxml.a库的某些函数制作一个动态库,但我收到此警告:*Warning:Linkingthesharedlibrarylibgstmatroskademux.laagainstthe_*staticlibrary/home/Mr32/gst-template4_final/gst-plugin/src/libmxml.a_isnotportable!我也收到这个警告:gcc:/home/Mr32/gst-template4_final/gst-plugin/src/libmxml.a:linker_inputfileunusedbecauselinkingnotdon
我正在使用libmxml.a库的某些函数制作一个动态库,但我收到此警告:*Warning:Linkingthesharedlibrarylibgstmatroskademux.laagainstthe_*staticlibrary/home/Mr32/gst-template4_final/gst-plugin/src/libmxml.a_isnotportable!我也收到这个警告:gcc:/home/Mr32/gst-template4_final/gst-plugin/src/libmxml.a:linker_inputfileunusedbecauselinkingnotdon
我正在尝试编译一个测试文件:gcc-otesttest.c-lg2c但是我得到了错误:/usr/bin/ld:cannotfind-lg2c如果我使用:gcc-otesttest.c-L/usr/lib/gcc/x86_64-redhat-linux/3.4.6-lg2c然后它工作正常。所以我添加了这样的路径:LD_LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/3.4.6:$LD_LIBRARY_PATH当我使用$LD_LIBRARY_PATH时,它列在那里,但是:gcc-otesttest.c-lg2c还是不行,报同样的错误,我不明白为什
我正在尝试编译一个测试文件:gcc-otesttest.c-lg2c但是我得到了错误:/usr/bin/ld:cannotfind-lg2c如果我使用:gcc-otesttest.c-L/usr/lib/gcc/x86_64-redhat-linux/3.4.6-lg2c然后它工作正常。所以我添加了这样的路径:LD_LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/3.4.6:$LD_LIBRARY_PATH当我使用$LD_LIBRARY_PATH时,它列在那里,但是:gcc-otesttest.c-lg2c还是不行,报同样的错误,我不明白为什
编辑:我解决了这个问题,解决方案如下。我正在专用于科学计算的共享计算集群中构建代码,因此我只能控制我的主文件夹中的文件。虽然我以fftw为例,但我想了解具体原因,为什么我尝试设置LD_LIBRARY_PATH不起作用。我像这样在我的主文件夹中构建fftw和fftw_mpi库./configure--prefix=$HOME/install/fftw--enable-mpi--enable-sharedmakeinstall构建良好,但在install/fftw/lib中,我发现新构建的libfftw3_mpi.so链接到错误版本的fftw库。$lddlibfftw3_mpi.so|gr
编辑:我解决了这个问题,解决方案如下。我正在专用于科学计算的共享计算集群中构建代码,因此我只能控制我的主文件夹中的文件。虽然我以fftw为例,但我想了解具体原因,为什么我尝试设置LD_LIBRARY_PATH不起作用。我像这样在我的主文件夹中构建fftw和fftw_mpi库./configure--prefix=$HOME/install/fftw--enable-mpi--enable-sharedmakeinstall构建良好,但在install/fftw/lib中,我发现新构建的libfftw3_mpi.so链接到错误版本的fftw库。$lddlibfftw3_mpi.so|gr
当我使用dl_open()时,我能否以编程方式从共享库(仅限Linux)中获取所有函数名称的列表?我想要这样的东西:std::vectorlist_all_functions(void*dl){//...whatcanIdohere?}intmain(){void*dl=dl_open("./mylib.so",RTLD_NOW);autofunctions=list_all_functions(dl);//...dl_close(dl);return0;}示例库(mylib.so)标题(.h):extern"C"{intsum(inta,intb);}来源(.c):intsum(in
当我使用dl_open()时,我能否以编程方式从共享库(仅限Linux)中获取所有函数名称的列表?我想要这样的东西:std::vectorlist_all_functions(void*dl){//...whatcanIdohere?}intmain(){void*dl=dl_open("./mylib.so",RTLD_NOW);autofunctions=list_all_functions(dl);//...dl_close(dl);return0;}示例库(mylib.so)标题(.h):extern"C"{intsum(inta,intb);}来源(.c):intsum(in
我不确定我的问题在Linux方面是否有意义。我正在寻找与VisualStudio工具包中的dumpbin.exe类似的东西。基本上,我有一个包含一堆库和一个可执行文件的现有项目。我想弄清楚哪些库是真正需要的,以及每个库中的哪些函数。我只使用共享对象,因为这个项目是针对ARM设备的。 最佳答案 也许您可以使用ldd和nm。ldd会告诉您需要哪些共享对象(也就是win中的dll)。nm将告诉转储符号。运行示例:$lddalinux-vdso.so.1=>(0x00007fffd1dff000)libc.so.6=>/lib/libc.s