gpt4 book ai didi

c - gcc -nostdlib 和 mudflap

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:40:26 26 4
gpt4 key购买 nike

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

warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

因此,我正在尝试 -nostdlib 并手动附加库,但出现以下错误:

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.cmyuser@linux:~/Desktop$ ./a.outmf: dlsym("mmap") = NULLAborted (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$
  1. 真正使用的是哪个 ld?我的桌面中的那个还是/lib64 中的那个?
  2. 必须包含哪些其他标志才能使其正确编译?

最佳答案

与其尝试静态链接库,不如将它们与您的可执行文件一起携带,并让 LD_LIBRARY_PATH 或 rpath 指向包含它们的目录。

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

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

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

关于c - gcc -nostdlib 和 mudflap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5777067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com