相关疑难解决方法(0)

如何链接到特定的glibc版本?

当我在我的Ubuntu Lucid 10.04 PC上编译某些内容时,它会与glibc链接.Lucid使用了2.11的glibc.当我在另一台带有旧glibc的PC上运行这个二进制文件时,命令失败说没有glibc 2.11 ......

据我所知,glibc使用符号版本控制.我可以强制gcc链接特定的符号版本吗?

在我的具体用法中,我尝试为ARM编译gcc交叉工具链.

linux linker gcc glibc libc

99
推荐指数
7
解决办法
8万
查看次数

Fedora 28/GLIBC 2.27 libm.so.6 logf()和powf()c ++

我相信其他Fedora 28用户会知道,操作系统的glibc最近更新为glibc 2.27.在许多其他事情中,2.27增加了logf()和powf()的新实现.这导致我的应用程序无法在具有旧glibc(例如Debian)的发行版上运行.在Debian上调用应用程序时,会产生以下错误:

  • ...找不到libm.so.6版本GLIBC-2.27(./app_name要求)

我使用以下过程跟踪符号到logf和powf:

objdump -T ./app_name | grep GLIBC_2.27
Run Code Online (Sandbox Code Playgroud)

其中给出了以下输出:

0000000000000000      DF *UND*  0000000000000000  GLIBC_2.27  powf
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.27  logf
Run Code Online (Sandbox Code Playgroud)

然后...

objdump -T /lib/libm.so.6 | grep -w logf
objdump -T /lib/libm.so.6 | grep -w powf
Run Code Online (Sandbox Code Playgroud)

其中给出了以下输出:

000397a0 g    DF .text  00000135  GLIBC_2.27  logf
00010430 g    DF .text  0000009e (GLIBC_2.0)  logf
Run Code Online (Sandbox Code Playgroud)

和...

000397a0 g    DF .text  00000135  GLIBC_2.27  powf
00010430 g    DF .text  0000009e (GLIBC_2.0)  powf
Run Code Online (Sandbox Code Playgroud)

因此,有了powf()和logf()也在GLIBC-2.0中实现的信息,我将以下内容添加到我的项目中(在main()之上)并重新编译.

__asm__(".symver logf,logf@GLIBC_2.0");
__asm__(".symver powf,powf@GLIBC_2.0"); 
Run Code Online (Sandbox Code Playgroud)

不幸的是,我的项目仍在使用GLIBC-2.27的powf和logf.实际上,我为Debian分发二进制文件非常重要,如果可以避免,我宁愿不必编译该分发版.

从历史上看,我已成功将此过程用于libc.so.6中的符号,但不是libm.so.6.我应该为libm.so.6做些不同的事吗?

显然,我在这里遗漏了一些东西,所以我将不胜感激任何提供的帮助.

非常感谢 …

linux debian glibc fedora c++11

7
推荐指数
1
解决办法
707
查看次数

docker能解决C共享库不匹配的问题吗?

我正在尝试在 ubuntu (18.04) 主机上运行一些 haskell 代码,该代码是在我的笔记本电脑上编译的。

host: 4.15.0-36-generic #39-Ubuntu SMP Mon Sep 24 16:19:09 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

laptop: 4.14.74-1-MANJARO #1 SMP PREEMPT Fri Oct 5 14:16:52 UTC 2018 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

我得到的错误是

/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found
Run Code Online (Sandbox Code Playgroud)

经过一些研究,我了解到这是因为我的笔记本电脑安装了 glibc 2.28 版本,但主机只有 libc6 2.27。

我做了一些谷歌搜索,认为也许 docker 可以解决这个问题。但是,我刚刚使用以下 Dockerfile 创建了一个 docker 映像,但它不起作用(相同的 GLIBC_2.28 错误)

FROM fpco/stack-build:lts-12.9 as builder

RUN mkdir /opt/build
COPY . /opt/build
RUN cd /opt/build && stack build 

FROM ubuntu:18.04
RUN mkdir -p /opt/myapp
WORKDIR /opt/myapp
RUN apt-get …
Run Code Online (Sandbox Code Playgroud)

linux haskell libc docker haskell-stack

7
推荐指数
1
解决办法
8330
查看次数

标签 统计

linux ×3

glibc ×2

libc ×2

c++11 ×1

debian ×1

docker ×1

fedora ×1

gcc ×1

haskell ×1

haskell-stack ×1

linker ×1