标签: glibc

构建一个也是可执行文件的.so

所以每个人都可能知道glibc /lib/libc.so.6可以在shell中执行,就像普通的可执行文件一样,在这种情况下它可以打印出版本信息并退出.这是通过在.so中定义入口点来完成的.对于某些情况,将其用于其他项目可能会很有趣.不幸的是,您可以通过ld的-e选项设置的低级入口点有点太低级:动态加载器不可用,因此您无法调用任何正确的库函数.因此,glibc通过此入口点中的裸系统调用实现write()系统调用.

我现在的问题是,任何人都可以想到一个很好的方法,如何从该入口点引导一个完整的动态链接器,以便可以访问其他.so的函数?

c linux glibc shared-libraries dlopen

48
推荐指数
2
解决办法
4467
查看次数

标准c库是否提供链表等数据结构?

标准C库实现,特别是glibc(GNU C库)提供链表,堆栈等.数据结构,还是我们必须自己滚动?

谢谢.

c gcc glibc data-structures

48
推荐指数
4
解决办法
5万
查看次数

检查特定gcc编译器的glibc版本

我的系统上安装了两个gcc编译器,一个是gcc 4.1.2(默认),另一个是gcc 4.4.4.我如何检查所使用的libc版本gcc 4.4.4,因为它/lib/libc.so.6显示了所使用的glibc gcc 4.1.2,因为它是默认的编译器.

c gcc glibc

46
推荐指数
7
解决办法
5万
查看次数

什么是_GLIBCXX_USE_NANOSLEEP?

名为_GLIBCXX_USE_NANOSLEEP的预处理器宏出现在两个标准头文件中:

  • C++/4.7.1/x86_64的未知-Linux的GNU /比特/ C++的config.h
  • C++/4.7.1 /线程

在GCC 4.7.1(Linux,64位)的默认构建中,c ++ config.h包含的唯一内容是此注释:

/* Defined if nanosleep is available. */
/* #undef _GLIBCXX_USE_NANOSLEEP */
Run Code Online (Sandbox Code Playgroud)

而在线程中,定义std::this_thread::sleep_for()std::this_thread::sleep_until()依赖于要定义的宏.如果没有定义,那么两个函数 - 尽管C++标准都要求 - 也不会被定义.

在我的系统(glibc 2.15)上,虽然nanosleep()函数(声明在ctime)存在并且可操作,但未定义宏.

我想知道这是什么以及如何处理它.特别:

  • 在构建GCC以默认激活此宏时是否应该使用配置选项,如此帖所示?(我在构建过程在线文档中找不到任何内容.)
  • nanosleep()函数和宏之间真的存在关联吗?nanosleep()in ctime/ 的声明time.h似乎不依赖于或定义宏.
  • 在我自己的头文件中定义宏或-D在命令行中作为选项(如相关问题中的建议)是否存在任何特定风险?如果我在一个nanosleep()不可用的系统上执行此操作会怎么样?我该如何找到它?

从GCC 4.8开始更新std::this_thread::sleep_for(),libstdc ++中会自动包含支持等.不再需要配置标志.从GCC 4.8更改日志:

this_thread :: sleep_for(),this_thread :: sleep_until()和this_thread :: yield()的定义不需要配置选项--enable-libstdcxx-time; …

c++ gcc sleep glibc

44
推荐指数
1
解决办法
8109
查看次数

在Ubuntu 12.04中导入Python 2.7中的Tensorflow时出错.'找不到GLIBC_2.17'

我已成功安装了Tensorflow绑定和python.但是当我尝试导入Tensorflow时,我得到了以下错误.

ImportError: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.17' not found (required by /usr/local/lib/python2.7/dist-packages/tensorflow/python/_pywrap_tensorflow.so)
Run Code Online (Sandbox Code Playgroud)

我试图将GLIBC_2.15更新为2.17,但没有运气.

python ubuntu glibc tensorflow

43
推荐指数
4
解决办法
7万
查看次数

man sscanf:%d 在 C 或 glibc 中已弃用?

我刚刚阅读 glibcsscanf 手册页(来自 Linux 手册页包),发现了以下内容:

\n
\n

可以使用以下转换说明符:
\n(...)

\n

d \xc2\xa0\xc2\xa0 已弃用。匹配一个可选的有符号十进制整数;\nnext 指针必须是指向 的指针int

\n

i \xc2\xa0\xc2\xa0 已弃用。匹配一个可选的有符号整数;next\n指针必须是指向 的指针int。如果整数以 或 开头,则以 16 为基数读取0x0X如果以 开头,则以 8 为基数读取 0;否则以 10 为基数读取。仅使用与\n基数相对应的字符。

\n

o \xc2\xa0\xc2\xa0 已弃用。匹配无符号八进制整数;下一个指针\n必须是指向 的指针unsigned int

\n

(...)

\n
\n
    \n
  • 怎么就%d被废弃了呢?似乎所有int说明符都已弃用。
  • \n
  • 它是什么意思以及有什么可以替代它们?
  • \n
\n

c gnu glibc scanf

39
推荐指数
6
解决办法
4209
查看次数

GLIBCXX版本

如果我在我的机器上编译C++程序,并在另一台机器上运行它(使用较旧的软件),我得到:/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found.

实际上在我的系统上glibc更新(我得到了gcc-libs 4.5.1:libstdc ++.so.6.0.14)并strings /usr/lib/libstdc++.so.6 | grep GLIBCXX从中打印GLIBCXX_3.4GLIBCXX_3.4.14.相反,在另一个系统上,它只打印到GLIBCXX_3.4.8(我得到了libstdc ++.so.6.0.8).

所以我有几个问题:

  1. 为什么我的链接器将c ++二进制文件链接到libstdc ++版本GLIBCXX_3.4.9而不是GLIBCXX_3.4.14

  2. 如果我对libstdc ++版本编译我的二进制文件,GLIBCXX_3.4我想它几乎可以在任何地方运行.这会暗示任何问题吗?(例如:它会使用较旧的 - 因此更糟糕的算法实现吗?)

  3. 相反,我将我的程序静态链接到我的libstdc ++,我想它会在任何地方运行; 当然,二进制文件会更大(~1MB),任何其他优点/缺点?

  4. 我可以强制链接器将我的二进制文件链接到给定版本的libstdc ++吗?

c++ linux portability glibc

37
推荐指数
1
解决办法
4万
查看次数

/lib/ld-linux.so.2:错误的ELF解释器:没有这样的文件或目录

当我执行命令安装应用程序后出现以下错误:/lib/ld-linux.so.2:错误的ELF解释器:没有这样的文件或目录

我不知道如何解决这个问题,找出我在网上搜索solotutions的解决方案,并找到以下解决方案:

yum install glibc.i686 or yum install glibc.i386
Run Code Online (Sandbox Code Playgroud)

但运气不好这根本没有用.它抛出以下错误:

Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
Setting up Install Process
No package glibc.i686 available.
Error: Nothing to do
Run Code Online (Sandbox Code Playgroud)

我再次尝试解决这个问题并从网上获得一些解决方案;

Download glibc rpm packge for centos 6 and install them.
Run Code Online (Sandbox Code Playgroud)

我下载了以下包装:

glibc-2.12-1.80.el6.i686.rpm
glibc-common-2.12-1.80.el6.i686.rpm
glibc-devel-2.12-1.80.el6.i686.rpm
glibc-headers-2.12-1.80.el6.i686.rpm
glibc-static-2.12-1.80.el6.i686.rpm
glibc-utils-2.12-1.80.el6.i686.rpm
Run Code Online (Sandbox Code Playgroud)

并尝试使用以下命令安装:

yum install glibc.i686
rpm -U glibc-2.12-1.80.el6.i686.rpm
rpm -ivh glibc-2.12-1.80.el6.i686.rpm
Run Code Online (Sandbox Code Playgroud)

他们都没有工作.得到以下消息:

[root@demo tmp_glibc]# rpm -ivh glibc-2.12-1.80.el6.i686.rpm
    error: Failed dependencies:
    glibc-common = 2.12-1.80.el6 is needed by glibc-2.12-1.80.el6.i686
    libfreebl3.so is needed …
Run Code Online (Sandbox Code Playgroud)

glibc yum

37
推荐指数
4
解决办法
20万
查看次数

什么是GLIBC?它是干什么用的?

我正在寻找C标准库的源代码.我的意思是,例如,如何编写cos,abs,printf,scanf,fopen和所有其他标准C函数,我的意思是看他们的源代码.

所以在搜索时,我遇到了GLIBC,但我不知道它到底是什么.它是GNU C库,它包含一些源代码,但它们实际上是什么,它们是标准函数的源代码还是其他东西?它用于什么?

c gnu glibc standard-library

36
推荐指数
3
解决办法
4万
查看次数

为什么不建议静态链接glibc?

在线上的大多数资源都指出您可以静态链接glibc,但不建议这样做。例如centos软件包repo

The glibc-static package contains the C library static libraries
for -static linking.  You don't need these, unless you link statically,
which is highly discouraged.
Run Code Online (Sandbox Code Playgroud)

这些消息来源很少(或从来没有)说过为什么这不是一个好主意。

c c++ linker glibc static-linking

36
推荐指数
2
解决办法
1520
查看次数