草庐IT

shared-libraries

全部标签

c - GNU libc.so 如何既是共享对象又是独立可执行文件?

在Linux中,GNU标准C库的共享库(libc.so)不仅是一个共享库,还可以作为独立的可执行文件运行,打印出版本信息:[me@computer~]$/lib/libc.so.6GNUCLibrarystablereleaseversion2.12,byRolandMcGrathetal.Copyright(C)2010FreeSoftwareFoundation,Inc.Thisisfreesoftware;seethesourceforcopyingconditions.ThereisNOwarranty;notevenforMERCHANTABILITYorFITNESSFOR

在运行时更改库加载顺序(如 LD_PRELOAD 但在执行期间)

如何更改函数在运行时加载的库?例如,假设我想用新的东西替换标准的printf函数,我可以编写自己的版本并将其编译到共享库中,然后将“LD_PRELOAD=/my/library.so"在运行我的可执行文件之前在环境中。但是,我想从程序本身内部更改该链接。这肯定是可能的……对吧?编辑不,以下内容不起作用(但如果你能告诉我如何让它起作用,那就足够了)。void*mylib=dlopen("/path/to/library.so",RTLD_NOW);printf=dlsym(mylib,"printf"); 最佳答案 据我所知,这是不可

在运行时更改库加载顺序(如 LD_PRELOAD 但在执行期间)

如何更改函数在运行时加载的库?例如,假设我想用新的东西替换标准的printf函数,我可以编写自己的版本并将其编译到共享库中,然后将“LD_PRELOAD=/my/library.so"在运行我的可执行文件之前在环境中。但是,我想从程序本身内部更改该链接。这肯定是可能的……对吧?编辑不,以下内容不起作用(但如果你能告诉我如何让它起作用,那就足够了)。void*mylib=dlopen("/path/to/library.so",RTLD_NOW);printf=dlsym(mylib,"printf"); 最佳答案 据我所知,这是不可

c++ - libpng 警告 : Incompatible libpng version in application and library

我有一个应用程序依赖于过多的库(不是我们都依赖)。大多数这些库都是通过包管理器安装的。对于那些不是的,我重新编译了它们,但我仍然得到相同的libpng不兼容错误。libpngwarning:Applicationwascompiledwithpng.hfromlibpng-1.2.44libpngwarning:Applicationisrunningwithpng.cfromlibpng-1.4.3这是一个错误,因为生成的缓冲区是空的。我如何知道哪个库链接到新库,哪个库链接到旧库?ldd...libpng12.so.0=>/lib/x86_64-linux-gnu/libpng12.

c++ - libpng 警告 : Incompatible libpng version in application and library

我有一个应用程序依赖于过多的库(不是我们都依赖)。大多数这些库都是通过包管理器安装的。对于那些不是的,我重新编译了它们,但我仍然得到相同的libpng不兼容错误。libpngwarning:Applicationwascompiledwithpng.hfromlibpng-1.2.44libpngwarning:Applicationisrunningwithpng.cfromlibpng-1.4.3这是一个错误,因为生成的缓冲区是空的。我如何知道哪个库链接到新库,哪个库链接到旧库?ldd...libpng12.so.0=>/lib/x86_64-linux-gnu/libpng12.

linux - linux上列出共享库依赖的编程方式

是否有任何编程方式(系统调用?)来列出Linux上的共享库依赖项?而不是使用ldd... 最佳答案 readelf-Walib.so|grepNEEDED 关于linux-linux上列出共享库依赖的编程方式,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6660745/

linux - linux上列出共享库依赖的编程方式

是否有任何编程方式(系统调用?)来列出Linux上的共享库依赖项?而不是使用ldd... 最佳答案 readelf-Walib.so|grepNEEDED 关于linux-linux上列出共享库依赖的编程方式,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6660745/

c - 如何更改解释器路径并将命令行参数传递给 Linux 上的 "executable"共享库?

这是一个“可执行”共享库的最小示例(假定文件名:mini.c)://Interpreterpathisdifferentonsomesystems//+definitelydifferentfor32-Bitmachinesconstcharmy_interp[]__attribute__((section(".interp")))="/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2";#include#includeintentry(){printf("WooFoo!\n");exit(0);}如果用例如gcc-fPIC-omini.so-shar

c - 如何更改解释器路径并将命令行参数传递给 Linux 上的 "executable"共享库?

这是一个“可执行”共享库的最小示例(假定文件名:mini.c)://Interpreterpathisdifferentonsomesystems//+definitelydifferentfor32-Bitmachinesconstcharmy_interp[]__attribute__((section(".interp")))="/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2";#include#includeintentry(){printf("WooFoo!\n");exit(0);}如果用例如gcc-fPIC-omini.so-shar

linux - 共享库中库函数的选择性静态链接

我想创建一个使用来自第3方静态库的函数的共享库。例如,libfoobar.a中的foo和bar。我知道我的主应用程序也在使用foo并将导出该符号。所以我只是想在bar中链接以节省代码大小并保留“foo”未解析(因为它将由主应用程序提供)。如果我包含libfoobar.a,链接器ld将在我的共享库中包含这两个函数。如果我不包含libfoobar.a,我的库将无法访问函数bar,因为应用程序本身没有链接到bar。问题:有没有办法告诉ld在构建共享库时只解析某些符号?将libfoobar.a变成共享库?从libfoobar.a中提取包含函数bar的文件并在链接器行上指定?别担心,运行时加载程