Linker 有没有办法在运行时检测库是否静态链接?

Linker 有没有办法在运行时检测库是否静态链接?,linker,ld,dlsym,Linker,Ld,Dlsym,我有一种情况,我发行了一个库,它使用符号插入来处理一些stdlib.h函数,例如malloc。我通常只使用标准的psymbol=dlsym(RTDL_NEXT,“symbol”)技术 不过,我有一些用户希望构建静态链接的二进制文件,而RTLD_NEXT在该上下文中无效---dlsym不仅在该上下文中失败,而且在未动态加载的代码中使用RTLD_NEXT时退出。我可以强制这些用户使用-Wl,--wrap,symbol方法,并提供适当的\uuuu real\u symbol,\u wrap\u sym

我有一种情况,我发行了一个库,它使用符号插入来处理一些
stdlib.h
函数,例如
malloc
。我通常只使用标准的
psymbol=dlsym(RTDL_NEXT,“symbol”)
技术

不过,我有一些用户希望构建静态链接的二进制文件,而
RTLD_NEXT
在该上下文中无效---dlsym不仅在该上下文中失败,而且在未动态加载的代码中使用RTLD_NEXT时退出。我可以强制这些用户使用
-Wl,--wrap,symbol
方法,并提供适当的
\uuuu real\u symbol,\u wrap\u symbol
对,因为他们使用
pkg config
链接到我的库

我可以一直使用链接器包装解决方案,但是我遇到了一个问题,我的一个可选库依赖项(
Open MPI
)也尝试包装相同的符号,但是使用了
RTLD\u NEXT
方法——这似乎优先于
ld
包装选项

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

是否有一种方法可以将这两个选项编译到我的库中(即
\uuuu real\u symbol
\uuu wrap\u symbol
用于
-static
链接,以及
symbol
psymbol
用于
dlsym
),在静态链接期间强制使用
-Wl,--wrap,symbol
标志(通过
pkg config--static--cflags
),并动态检查
RTLD\u NEXT
当前是否可用?这样我就可以构建一个在两种上下文中都能工作的库