3

我有一种情况,我分发了一个使用符号插入来处理某些stdlib.h函数的库,例如malloc. 我通常只会使用这里描述psymbol = dlsym(RTDL_NEXT,"symbol")的标准技术。

我有一些用户想要构建静态链接的二进制文件,但RTLD_NEXT在该上下文中无效——dlsym不仅在该上下文中失败,它还以RTLD_NEXT 在代码未动态加载中使用而退出。我可以强制这些用户使用此处描述-Wl,--wrap,symbol的方法,并提供适当的配对,因为无论如何他们都在使用链接到我的库。__real_symbol,_wrap_symbolpkg-config

始终使用链接器包装解决方案对我来说很好,但是我有一个问题,我的可选库依赖项之一 ( Open MPI) 也试图包装相同的符号,但正在使用该RTLD_NEXT方法---这似乎优先在ldwrap 选项上。

我当然可以实现这两个选项,并在配置dlsym时静态选择方法(无论如何都阻止链接)。问题是我不确定这将是唯一试图插入我的符号的库。Open MPIOpen MPI-static

有没有一种方法可以将这两个选项编译到我的库中(即,__real_symbol用于__wrap_symbol链接-staticsymbol*psymbol用于dlsym),在静态链接期间强制-Wl,--wrap,symbol标志(通过pkg-config --static --cflags),并动态检查RTLD_NEXT当前是否可用?这样我就可以构建一个在这两种情况下都可以使用的库。

4

0 回答 0