Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
gcc-Nostlib和mudflap_C_Linux_Gcc - Fatal编程技术网

gcc-Nostlib和mudflap

gcc-Nostlib和mudflap,c,linux,gcc,C,Linux,Gcc,我需要在另一个linux发行版中运行我的程序,该发行版没有安装mudflap库,并且具有不同的glibc版本。我曾尝试使用-static编译我的程序,但不可能: warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking 因此,我尝试使用-nostlib并手动附加lib,

我需要在另一个linux发行版中运行我的程序,该发行版没有安装mudflap库,并且具有不同的glibc版本。我曾尝试使用-static编译我的程序,但不可能:

warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking 因此,我尝试使用-nostlib并手动附加lib,但出现以下错误:

myuser@linux:~/Desktop$ gcc -nostdlib -Wl,-dynamic-linker,/home/myuser/Desktop/ld-linux-x86-64.so.2,-rpath,/home/myuser/Desktop /home/myuser/Desktop/libc.so.6 -fmudflap /home/myuser/Desktop/libmudflap.so.0 /home/myuser/Desktop/libdl.so.2 simple.c myuser@linux:~/Desktop$ ./a.out mf: dlsym("mmap") = NULL Aborted (core dumped) myuser@linux:~/Desktop$ ldd a.out linux-vdso.so.1 => (0x00007fff2bad2000) libc.so.6 => /home/myuser/Desktop/libc.so.6 (0x00007fddfd521000) libmudflap.so.0 => /home/myuser/Desktop/libmudflap.so.0 (0x00007fddfd175000) libdl.so.2 => /home/myuser/Desktop/libdl.so.2 (0x00007fddfcf70000) /home/myuser/Desktop/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007fddfd884000) myuser@linux:~/Desktop$ 哪个ld被真正使用?我的桌面上的还是/lib64中的? 要使其正确编译,还必须包含哪些其他标志?
与其尝试静态链接库,不如将它们与可执行文件一起携带,并让LD_LIBRARY_PATH或rpath指向包含它们的目录

但是千万不要携带libc,如果你在旧版本的libc上链接你的程序,你应该是安全的。这意味着您需要在较旧或与目标系统完全相同的环境中编译应用程序

只要不使用在编译系统和目标系统之间进行版本更新的符号,就可以使用较新的系统


不幸的是,静态链接比听起来复杂得多。

没有那么复杂。使用strace查找二进制链接到的库


gcc-Xlinker-rpath=/path/to/provided/libs-Xlinker-I/path/to/provided/linker/ld-2.11.2.so-std=c99-D_POSIX_C_SOURCE=200112L-fmudflap/path/to/provided/mudflap/libmudflap.so.0 simple.C

在部署到其他机器的程序中使用mudflap有什么原因吗?这是一个调试工具。。。