aarch64我正在我的系统上交叉编译应用程序x86 Ubuntu Bionic,但遇到glibc版本不匹配的问题。我的交叉编译工具链使用 v2.27,而运行应用程序的系统使用 v2.24。我认为可能是因为我的工具链版本太高,所以我决定降级。
删除所有以前的交叉编译安装后,我安装了gcc-4.8-aarch64-linux-gnu(因为我已经在不同的主机系统上成功地使用此版本交叉编译了应用程序),认为它会安装旧版本aarch64的glibcto /usr/aarch64-linux-gnu/lib/。然而,再次安装了v2.27(我在安装新的交叉编译工具链之前验证了该目录不存在)。
所以我的问题是双重的:
aarch64版本?它与我自己的系统版本直接相关吗?glibcgcc-4.8-aarch64-linux-gnux86glibcaarch64版本glibc)版本的正确方法?我正在进行一些研究,并希望编辑libstdc ++库中的一些源代码进行实验.具体而言,我对试验并行排序算法感兴趣.有没有一个地方我可以找到文档来轻松编辑和构建源代码?
我试过构建各种版本的libstdc ++库,但没有成功.似乎大多数新版本都需要构建整个gcc包,这是一个更漫长的过程,特别是如果我要编辑和试验libstdc ++中的一些文件.
我也一直无法找到包含并行排序算法的源文件.我似乎只能找到定义函数的头文件,而不是源代码本身.任何建议或文档链接将不胜感激.
这是我关于stackoverflow的第一个问题,所以我会尽力做好.
语境:
我想提供一个可以在每个Linux发行版上运行的程序(例如,一个将使用C++ 11的程序,在没有C++ 11库的系统上运行).为此,我想复制我的程序使用的所有库,并将它们放在带有可执行文件的文件夹中,这样它就可以使用这些库而不是系统库.
我有两个测试环境: - Opensuse,(GNU libc)2.19 - Ubuntu,(Ubuntu EGLIBC 2.17-Oubuntu5.1)2.17
我在Opensuse下编译我的程序,并在Ubuntu下运行它.该程序使用默认库时效果很好.
项目:
这是main.c:
int main(int ac, char **av) {
printf("Hello World !\n");
}
Run Code Online (Sandbox Code Playgroud)
这是我在Opensuse下的文件夹的树(在没有main.c et exec.sh的Ubuntu下相同):
+ project
|
+--- main.c
+--- a.out
+--- exec.sh
+---+ lib
|
+--- libc.so.6
+--- ld-linux-x86-64.so.2
Run Code Online (Sandbox Code Playgroud)
最后,当我使用简单的编译启动程序时,这里是ldd和readelf:
> gcc main.c -o a.out
> ldd ./a.out
linux-vdso.so.1 (0x00007fff85f57000)
libc.so.6 => /lib64/libc.so.6 (0x00007f1fdaaaf000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1dae75000)
> readelf -d a.out | grep "library\|Library"
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
Run Code Online (Sandbox Code Playgroud)
我做了一些研究,最后发现这篇帖子解释了一下ld-linux.so.
这是我用来编译的脚本: …
我尝试将我的 glibc 库更新到 2.7 版本。我的编译过程如下所示:
\n\n ../configure --disable-debug --disable-dependency-tracking CFLAGS=\\\n "-U_FORTIFY_SOURCE -O2 -fno-stack-protector" --disable-silent-rules\\\n --prefix=/disk2/hyf/lib/glib-2.7 \n\n make & make install \nRun Code Online (Sandbox Code Playgroud)\n\n由于特权\xef\xbc\x8c 的限制,我不得不将其安装在非默认搜索目录(例如/usr/local/lib)中。
我添加后/disk2/hyf/lib/glib-2.7/lib,LD_LIBRARY_PATH问题就出现了。
输入ls, ll, vim等正常命令,都会出现错误Segmentation fault。
我在网上搜索了一下,发现有两个原因可能与该Segmentation fault问题有关。(1)glibc-2.7/lib与系统的gcc/lib不兼容(centos系统的gcc版本是gcc 3.4,我也成功安装了gcc-4.9作为替代)
(2) glibc-2.7安装在非默认路径。
\n\n由于任何命令都无法正常工作,我不知道如何解决我的问题。如何解决这个问题?
\n\n更重要的是,我的错误是否会影响其他用户(我是 Linux 集群的非 sudo 用户)?
\n我需要使用调试符号从源代码编译glibc。
1.我在哪里为此指定'-g'选项
2.我如何稍后将示例代码链接到此特定的glibc,而不是系统上安装的glibc?
如果我在 Ubuntu 上得到一些由 GCC 4.8 构建的 C++ 代码,该代码没有 GUI/界面,仅调用标准 Linux 库,那么该二进制文件可以在 RHEL 5/6 上完美运行,并且可以与更旧的 GCC 一起完美运行吗?
我必须使用 psycopg2 以 postgresql 作为后端在服务器上运行一个龙卷风 web 应用程序。我正在开发 Red Hat Enterprise Linux Server 版本 6.5。我设置了一个虚拟环境。现在,在这台服务器上,我没有 root 访问权限,无法使用 pip 或 yum,也无法从服务器复制文本(因此我无法发布确切的错误日志)。我一直在手动下载库的 tar 文件并安装它们。当我尝试运行 web 应用程序时,出现以下错误:
ImportError: /lib/libc.so.6: version `GLIBC_2.14' not found (required by /usr/lib/libpq.so.5)
Run Code Online (Sandbox Code Playgroud)
libc.so.6 的版本是 2.12。该错误显示在 psycopg2/ init.py中。
我很抱歉,这没什么可继续的,但服务器有很多限制。任何帮助将不胜感激。