Questions tagged «glibc»

8
为什么要快速运行glibc的复杂性太复杂?
我在这里浏览strlen代码,想知道是否确实需要代码中使用的优化?例如,为什么下面这样的东西不能同样好或更好? unsigned long strlen(char s[]) { unsigned long i; for (i = 0; s[i] != '\0'; i++) continue; return i; } 较简单的代码对编译器进行优化是否更好或更容易? strlen链接后面页面上的代码如下所示: /* Copyright (C) 1991, 1993, 1997, 2000, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Torbjorn Granlund (tege@sics.se), with …

11
单个主机上的多个glibc库
单个主机上的多个glibc库 我的Linux(SLES-8)服务器当前具有glibc-2.2.5-235,但是我有一个无法在该版本上运行的程序,并且需要glibc-2.3.3。 是否可以在同一主机上安装多个glibcs​​? 这是我在旧glibc上运行程序时遇到的错误: ./myapp: /lib/i686/libc.so.6: version `GLIBC_2.3' not found (required by ./myapp) ./myapp: /lib/i686/libpthread.so.0: version `GLIBC_2.3.2' not found (required by ./myapp) ./myapp: /lib/i686/libc.so.6: version `GLIBC_2.3' not found (required by ./libxerces-c.so.27) ./myapp: /lib/ld-linux.so.2: version `GLIBC_2.3' not found (required by ./libstdc++.so.6) ./myapp: /lib/i686/libc.so.6: version `GLIBC_2.3' not found (required by ./libstdc++.so.6) 因此,我创建了一个名为newglibc的新目录,并将以下文件复制到其中: …
171 linux  gcc  glibc 

4
如何链接到特定的glibc版本?
当我在Ubuntu Lucid 10.04 PC上编译某些东西时,它会与glibc链接。Lucid使用glibc 2.11。当我在具有旧版glibc的另一台PC上运行此二进制文件时,该命令失败,提示没有glibc 2.11 ... 据我所知,glibc使用符号版本控制。我可以强制gcc链接到特定的符号版本吗? 在我的具体用法中,我尝试为ARM编译gcc跨工具链。
110 linux  gcc  linker  glibc  libc 

4
在C代码中使用C ++库
我有一个C ++库,其中提供了用于管理数据的各种类。我有该库的源代码。 我想扩展C ++ API以支持C函数调用,以便该库可以与C代码和C ++代码同时使用。 我正在使用GNU工具链(gcc,glibc等),因此语言和体系结构支持不是问题。 从技术上讲不可能有什么原因吗? 我需要注意任何陷阱吗? 是否有与此相关的资源,示例代码和/或文档? 我发现的其他一些内容: 使用以下代码包装C代码需要使用的C ++标头。 #ifdef __cplusplus extern "C" { #endif // // Code goes here ... // #ifdef __cplusplus } // extern "C" #endif 将“真实的” C ++接口保留在C不包含的单独的头文件中。在这里考虑PIMPL原理。#ifndef __cplusplus #error在这里使用东西有助于发现任何疯狂。 小心C ++标识符作为C代码中的名称 C和C ++编译器之间的枚举大小不同。如果您使用的是GNU工具链,则可能不是问题,但仍然要小心。 对于结构,请遵循以下格式,以免C混淆。 typedef struct X { ... } X …
102 c++  c  gcc  glibc 

6
Linux静态链接已死?
实际上,Linux上的-static gcc标志现在不起作用。让我从GNU libc常见问题中引用: 2.22。即使是静态链接程序也需要一些共享库,这对我来说是不可接受的。我能做什么? {AJ} NSS(有关详细信息,请键入`info libc“名称服务开关”“)在没有共享库的情况下无法正常工作。NSS只需更改一个配置文件(/etc/nsswitch.conf)即可使用不同的服务(例如NIS,文件,db,hesiod),而无需重新链接任何程序。唯一的缺点是现在静态库需要访问共享库。这由GNU C库透明地处理。 一种解决方案是使用--enable-static-nss配置glibc。在这种情况下,您可以创建仅使用服务dns和文件的静态二进制文件(为此更改/etc/nsswitch.conf)。您需要明确链接所有这些服务。例如: gcc -static test-netdb.c -o test-netdb \ -Wl,--start-group -lc -lnss_files -lnss_dns -lresolv -Wl,--end-group 这种方法的问题在于,必须将使用NSS例程的每个静态程序链接到所有这些库。 {UD}实际上,无法再说使用此选项编译的libc正在使用NSS。不再有开关。因此,强烈 建议不要使用--enable-static-nss,因为这会使系统上程序的行为不一致。 关于这一事实,现在是否有任何合理的方法可以在Linux上创建功能齐全的静态构建,或者静态链接在Linux上完全无效?我的意思是静态构建: 行为与动态构建完全相同(行为不一致的static-nss是邪恶的!); 适用于合理的glibc环境和Linux版本;

2
启用优化后,为什么此代码慢6.5倍?
我想基准glibc的strlen功能,出于某种原因,发现它显然执行多慢与GCC启用优化,我不知道为什么。 这是我的代码: #include <time.h> #include <string.h> #include <stdlib.h> #include <stdio.h> int main() { char *s = calloc(1 << 20, 1); memset(s, 65, 1000000); clock_t start = clock(); for (int i = 0; i < 128; ++i) { s[strlen(s)] = 'A'; } clock_t end = clock(); printf("%lld\n", (long long)(end - start)); …
68 c  performance  gcc  glibc 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.