当我在Ubuntu Lucid 10.04 PC上编译一些东西的时候,它会和glibc链接起来。 Lucid使用2.11的glibc。 当我在另一台PC上运行这个二进制文件时,该命令失败,说没有glibc 2.11 … 据我所知glibc使用符号版本。 我可以强制gcc链接到一个特定的符号版本? 在我的具体使用中,我尝试为ARM编译一个gcc交叉工具链。
我有一个C ++库,提供pipe理数据的各种类。 我有图书馆的源代码。 我想扩展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中的单独的头文件中。 使用#ifndef __cplusplus #error东西在这里帮助检测任何疯狂。 在C代码中谨慎使用C ++标识符作为名称 C和C ++编译器之间的枚举大小不一。 如果您使用GNU工具链,可能不是问题,但仍然要小心。 对于结构遵循以下forms,以便C不会感到困惑。 typedef struct X { … } X 然后使用指针传递C ++对象,它们只需要在C中声明为结构X,其中X是C ++对象。 […]
我有一个长期生活的应用程序与频繁的内存分配 – 释放。 任何malloc实现返回将内存释放回系统? 在这方面,什么是这样的行为: ptmalloc 1,2(glibc默认)或3 dlmalloc tcmalloc(谷歌线程malloc) solaris 10-11默认的malloc和mtmalloc FreeBSD 8默认的malloc(jemalloc) 囤地malloc? 更新 如果我的应用程序的内存消耗在白天和夜晚可能会非常不同(例如),我可以强制任何malloc将释放的内存返回给系统吗? 没有这样的返回释放内存将被换出,并在很多时候,但这样的内存只包含垃圾。
单个主机上有多个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) 于是我创build了一个名为newglibc的新目录,并将以下文件复制到: libpthread.so.0 libm.so.6 libc.so.6 ld-2.3.3.so ld-linux.so.2 […]