我正在尝试在我没有 root 访问权限的系统上升级 glibc。因此,我安装到本地前缀。我需要一些帮助,以了解设置此功能的最佳实践,以及帮助解决特定问题。(我的问题的快速总结:当我将新安装的 glibc lib 路径包含在我的LD_LIBRARY_PATH.
背景资料:
$ uname -a
Linux 3.13.0-68-generic #111-Ubuntu SMP Fri Nov 6 18:17:06 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
编译器/工具链:我正在运行从 gcc 5.3.0 的源版本本地编译和安装的。它似乎工作正常。这是安装在~/toolchains/gcc_5.3.0
$ ls ~/toolchains/gcc_5.3.0
bin include lib lib32 lib64 libexec share
Run Code Online (Sandbox Code Playgroud)
尝试安装:glibc-2.23从源代码--prefix=~/local/
我在这台机器上没有 sudo(它是一个共享集群;如果你需要可定制性,策略是安装你自己的工具链,就像我一样)。
$ echo $LD_LIBRARY_PATH
~/toolchains/gcc_5.3.0/lib:~/toolchains/gcc_5.3.0/lib64
Run Code Online (Sandbox Code Playgroud)
系统安装的 glibc 版本为 2.19:
$ ldd --version
ldd (Ubuntu EGLIBC 2.19-0ubuntu6.7) 2.19
Run Code Online (Sandbox Code Playgroud)
(为了清楚起见,我将上面和下面的绝对路径替换为 ~ )
问题:
我能够使用 gcc 5.3.0 以及系统安装的 gcc 4.8.4 编译和安装 glibc-2.23。编译和安装到 ~/local/ 可以正常工作LD_LIBRARY_PATH。但是,为了利用新的 …
尽管阅读了许多关于该主题的教程并做了(我认为)所有必要的事情,但我仍在努力让 perf_events 为我提供带有符号的堆栈跟踪。有可能我本地安装的 perf(详情见下文)以某种方式搞砸了?无论如何,这就是我所做的:
main.cpp 是一个简单的 C++ 程序,它调用在同一个文件中定义的几个函数,分配一些内存并释放它,并打印出一些东西。
编译命令:
gcc -std=c++11 -lstdc++ main.cpp -Og -fno-omit-frame-pointer -fno-inline -o arr_test
Run Code Online (Sandbox Code Playgroud)
配置文件命令:
perf record -a -g -- ./arr_test && perf report --stdio
Run Code Online (Sandbox Code Playgroud)
我确实收到了有关内核符号的以下警告,但我认为这无关紧要,因为我现在只关心应用程序中的符号:
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.052 MB perf.data (~2285 samples) ]
[kernel.kallsyms] with build id e22966849c48748782a1be4fe0ce94db6838b806 not found, continuing without symbols
[kernel.kallsyms] with build id e22966849c48748782a1be4fe0ce94db6838b806 not found, continuing without symbols
Warning:
Kernel address maps (/proc/{kallsyms,modules}) were restricted. …Run Code Online (Sandbox Code Playgroud)