[英]gcc -nostdlib and mudflap
我需要在另一個Linux發行版中運行我的程序,該發行版沒有安裝mudflap庫並且具有不同的glibc版本。 我試圖用-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.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_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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.