共享库由使用--enable静态nss编译的自定义glibc加载

共享库由使用--enable静态nss编译的自定义glibc加载,c,linux,gcc,glibc,C,Linux,Gcc,Glibc,我正在尝试创建一个静态应用程序,它不会在运行时加载库。具体来说(为了证明概念),我编写了一个调用gethostbyname的短程序: #包括 #包括 #包括 #包括 #包括 使用名称空间std; int main(){ 字符串主机名(100,0); const int hostname_length=gethostname( const_cast(hostname.data()), hostname.capacity() ); hostname.resize(hostname.size());

我正在尝试创建一个静态应用程序,它不会在运行时加载库。具体来说(为了证明概念),我编写了一个调用
gethostbyname
的短程序:

#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
字符串主机名(100,0);
const int hostname_length=gethostname(
const_cast(hostname.data()),
hostname.capacity()
);
hostname.resize(hostname.size());

cout这是glibc 2.33中引入的回归,作为重构的一部分,支持自动重新加载
/etc/nsswitch.conf
。我在这里报告了它:


gethostbyname
在运行时使用不同的行为。您可以根据需要进行修补一般来说,您不需要构建自己的glibc来构建(全部-)静态可执行文件,但也有例外。特别是,任何为模块或扩展提供插件样式模型的东西几乎肯定会使用动态链接来实现这一点,这将需要一些共享库组件。Glibc的名称解析器就是这样一个组件。@basileStrynkevitch所以如果我理解正确,甚至
musl
的构建方式无法在运行时加载库而不进行修补?如果是这种情况,为什么要修补
musl
而不是
glibc
?我对
musl libc
知之甚少。请下载并研究其源代码。您也可以尝试一下。但您确实应该解释一下(在几段书面英语中)为什么要尝试创建一个在运行时不会加载库的静态应用程序
和其他解析程序函数必须避免使用,或者您需要一个备用C库。如果您选择后者,则需要研究如何配置备用库的名称解析程序,因为这可能与glibc的解析程序的配置互操作,也可能不互操作。谢谢您的回答
/usr/bin/ld: /tmp/cc1EWL0m.o: in function `main':
main.cpp:(.text+0xe2): warning: Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
../glibc/configure --enable-static-pie --enable-static-nss --prefix=/opt/glibc --disable-nscd
make
sudo make install
g++ -o custom main.cpp -nostdlib -nostartfiles -static /opt/glibc/lib/crt1.o /opt/glibc/lib/crti.o `gcc --print-file-name=crtbegin.o` -L/opt/glibc/lib -Wl,--start-group -lstdc++ -lgcc -lgcc_eh -lc -Wl,--end-group `gcc --print-file-name=crtend.o` /opt/glibc/lib/crtn.o
cat /proc/`pgrep custom`/maps
00400000-00401000 r--p 00000000 08:10 962                                /home/dan/projects/l/custom_glibc/example/custom
00401000-00565000 r-xp 00001000 08:10 962                                /home/dan/projects/l/custom_glibc/example/custom
00565000-005bd000 r--p 00165000 08:10 962                                /home/dan/projects/l/custom_glibc/example/custom
005bd000-005c7000 r--p 001bc000 08:10 962                                /home/dan/projects/l/custom_glibc/example/custom
005c7000-005ca000 rw-p 001c6000 08:10 962                                /home/dan/projects/l/custom_glibc/example/custom
005ca000-005cf000 rw-p 00000000 00:00 0 
019df000-01a01000 rw-p 00000000 00:00 0                                  [heap]
7f3e9f5cf000-7f3e9f6cf000 rw-p 00000000 00:00 0 
7f3e9f6cf000-7f3e9f6d0000 r--p 00000000 08:10 337811                     /opt/glibc/lib/ld-2.33.so
7f3e9f6d0000-7f3e9f6f4000 r-xp 00001000 08:10 337811                     /opt/glibc/lib/ld-2.33.so
7f3e9f6f4000-7f3e9f6fd000 r--p 00025000 08:10 337811                     /opt/glibc/lib/ld-2.33.so
7f3e9f6fd000-7f3e9f6fe000 ---p 0002e000 08:10 337811                     /opt/glibc/lib/ld-2.33.so
7f3e9f6fe000-7f3e9f700000 r--p 0002e000 08:10 337811                     /opt/glibc/lib/ld-2.33.so
7f3e9f700000-7f3e9f702000 rw-p 00030000 08:10 337811                     /opt/glibc/lib/ld-2.33.so
7f3e9f702000-7f3e9f728000 r--p 00000000 08:10 330240                     /opt/glibc/lib/libc-2.33.so
7f3e9f728000-7f3e9f869000 r-xp 00026000 08:10 330240                     /opt/glibc/lib/libc-2.33.so
7f3e9f869000-7f3e9f8b5000 r--p 00167000 08:10 330240                     /opt/glibc/lib/libc-2.33.so
7f3e9f8b5000-7f3e9f8b6000 ---p 001b3000 08:10 330240                     /opt/glibc/lib/libc-2.33.so
7f3e9f8b6000-7f3e9f8b9000 r--p 001b3000 08:10 330240                     /opt/glibc/lib/libc-2.33.so
7f3e9f8b9000-7f3e9f8bc000 rw-p 001b6000 08:10 330240                     /opt/glibc/lib/libc-2.33.so
7f3e9f8bc000-7f3e9f8c0000 rw-p 00000000 00:00 0 
7f3e9f8c0000-7f3e9f8c3000 r--p 00000000 08:10 337766                     /opt/glibc/lib/libnss_files-2.33.so
7f3e9f8c3000-7f3e9f8c9000 r-xp 00003000 08:10 337766                     /opt/glibc/lib/libnss_files-2.33.so
7f3e9f8c9000-7f3e9f8cb000 r--p 00009000 08:10 337766                     /opt/glibc/lib/libnss_files-2.33.so
7f3e9f8cb000-7f3e9f8cc000 r--p 0000a000 08:10 337766                     /opt/glibc/lib/libnss_files-2.33.so
7f3e9f8cc000-7f3e9f8cd000 rw-p 0000b000 08:10 337766                     /opt/glibc/lib/libnss_files-2.33.so
7ffcb4dd2000-7ffcb4df4000 rw-p 00000000 00:00 0                          [stack]
7ffcb4df9000-7ffcb4dfc000 r--p 00000000 00:00 0                          [vvar]
7ffcb4dfc000-7ffcb4dfe000 r-xp 00000000 00:00 0                          [vdso]