标签: libc

C 标准库中的符号是否保留在 C++ 中?

这是对不同问题的跟进。

最初的问题还有其他问题,但我必须意识到主要问题(根据 CLang)是重新定义time为不同的符号,而只使用了很好的C++ 包含。

所以这是一个精简版:

#include<iostream>

using std::cout;
using std::endl;

class time
{
public:
    int h, min, sec;
};

const int full = 60;

void canonify(time& pre)     // Error here (line 14)
{
    pre.min += pre.sec / full;
    pre.h += pre.min / full;
    pre.sec %= full;
    pre.min %= full;
}
int main()
{
    time a;                  // and here (line 23)
    a.h = 3;
    a.min = 128;
    a.sec = 70;
    canonify(a);
    cout << …
Run Code Online (Sandbox Code Playgroud)

c c++ libc language-lawyer

34
推荐指数
2
解决办法
2584
查看次数

如何在Linux上重新实现(或包装)系统调用功能?

假设我想完全接管open()系统调用,可能包装实际的系统调用并执行一些日志记录.一种方法是使用LD_PRELOAD加载(用户自制的)共享对象库,该库接管open()入口点.

然后,用户制作的开放()例程获得的指针的glibc函数open()dlsym()荷兰国际集团它,并调用它.

然而,上面提出的解决方案是动态解决方案.假设我想open()静态链接我自己的包装器.我该怎么办?我猜机制是一样的,但我也猜测用户定义open()和libc 之间会有一个符号冲突open().

请分享任何其他技术以实现相同的目标.

c linux libc system-calls

31
推荐指数
1
解决办法
2万
查看次数

我在哪里可以在线浏览libc的源代码(如doxygen)

有时我想在stdlib中查找函数的实现,我已经下载了源代码,但它非常混乱.

因为许多命中,因为greping并不适合.

有没有人知道具有文档的网页doxygen风格.

Linux内核也是如此.

谢谢

documentation kernel libc

29
推荐指数
3
解决办法
2万
查看次数

无限和回归

有数学运算产生+/-无穷大的实数.例如exp(-infinity) = 0.标准C库中是否存在接受IEEE-754无穷大的数学函数标准(不抛弃或返回NaN).我在Linux系统上,并且会对这样的列表感兴趣glibc.我在他们的在线手册中找不到这样的清单.例如,他们的文档exp没有提到它如何处理-infinity案件.任何帮助都感激不尽.

c c++ floating-point libc

27
推荐指数
2
解决办法
892
查看次数

不使用NDK的genymotion模拟器上的致命信号11(SIGSEGV)代码= 2

我的应用程序不使用NDK.我正在GenyMotion Nexus 7仿真器上测试它,问题很难再现,我仍然没有想出一个正确的方法来重现它.有时候应用程序可以正常运行很长时间,有时它会崩溃并在使用大约30秒后自动重启.

编辑:我不是100%,但它只发生在genymotion模拟器,但不是常规的Android模拟器(我会继续测试).

当我在横向模式下添加对大屏幕的支持时开始出现问题(开始在横向中一次显示两个片段,纵向仅显示1个片段(宽度小于720)).

其中一个片段延迟加载图像(来自内存,磁盘或互联网).

我对这种动态添加和删除片段很新,所以我确信那里可能有一些东西.

无论如何,请帮助我解码这个转储并找出导致崩溃的原因(我会尝试省略我觉得不重要的东西):

12-17 16:52:18.344    1255-1255/? A/libc? Fatal signal 11 (SIGSEGV) at 0x97858094 (code=2), thread 1255 (hiexpressgradle)
12-17 16:52:18.448      121-121/? I/DEBUG? *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
12-17 16:52:18.448      121-121/? I/DEBUG? Build fingerprint: 'generic/vbox86tp/vbox86tp:4.3/JLS36G/eng.buildbot.20131127.101043:userdebug/test-keys'
12-17 16:52:18.448      121-121/? I/DEBUG? Revision: '0'
12-17 16:52:18.448      121-121/? I/DEBUG? pid: 1255, tid: 1255, name: hiexpressgradle  >>> XXX <<<
12-17 16:52:18.448      121-121/? I/DEBUG? signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr …
Run Code Online (Sandbox Code Playgroud)

android libc android-ndk android-fragments genymotion

27
推荐指数
2
解决办法
2万
查看次数

为什么argv参数execvp不是const?

因此定义了execvp:

int execvp(const char *file, char *const argv[]);
Run Code Online (Sandbox Code Playgroud)

这使得这样的代码无法使用:

const char* argv[] = {"/bin/my", "command", "here", NULL};
execvp(argv[0], argv);
Run Code Online (Sandbox Code Playgroud)

这是意外遗漏吗?围绕这个const_cast是否安全?或者做一些execvp实现实际上是在那个内存上乱写?

c libc execvp

26
推荐指数
1
解决办法
1838
查看次数

嵌入式系统的小型libc

我正在寻找一个用于嵌入式使用ARM7微控制器上的freertos的小型libc.我看过newlib,但它对我的需求来说太复杂了.Newlib在许多函数中调用malloc()(例如printf()),这对小型嵌入式实时系统不利.

有谁知道一个适合我的应用程序的小型,可移植,开源的libc实现?

c embedded libc freertos

25
推荐指数
3
解决办法
1万
查看次数

替换极其缓慢的pow()函数

我们有一个CFD求解器,在运行模拟时,发现它在某些机器上运行速度非常慢,而在其他机器上却运行得非常慢.使用英特尔VTune,发现以下行是问题(在Fortran中):

RHOV= RHO_INF*((1.0_wp - COEFF*EXP(F0)))**(1.0_wp/(GAMM - 1.0_wp))
Run Code Online (Sandbox Code Playgroud)

使用VTune进行钻取,问题可以追溯到call pow装配线,当跟踪堆栈时,它显示它正在使用__slowpow().经过一番搜索,这个页面出现了抱怨同样的事情.

在具有libc版本2.12的机器上,模拟花了18秒.在libc版本为2.14的机器上,模拟耗时0秒.

基于上述页面的信息,当基数pow()接近1.0 时出现问题.所以我们做了另一个简单的测试,我们在之前用任意数字缩放基数pow(),然后除以在pow()调用之后提升到指数的数字.使用libc 2.12时,运行时间从18秒减少到0秒.

但是,将这些全部放在我们所做的代码上是不切实际的a**b.如何更换pow()libc中的函数?例如,我希望call powFortran编译器生成的装配线调用pow()我们编写的自定义函数来执行缩放,调用libc pow()然后除以缩放.如何创建一个对编译器透明的中间层?

编辑

为了澄清,我们正在寻找类似(伪代码)的东西:

double pow(a,b) {
   a *= 5.0
   tmp = pow_from_libc(a,b)
   return tmp/pow_from_libc(5.0, b)
}
Run Code Online (Sandbox Code Playgroud)

是否可以加载powlibc并在我们的自定义函数中重命名以避免命名冲突?如果customPow.o文件可以pow从libc 重命名,如果其他东西仍然需要libc会发生什么?这会导致libc powcustomPow.opowlibc 之间的命名冲突吗?

c fortran libc pow

24
推荐指数
2
解决办法
4192
查看次数

为什么最大负整数-2147483648的绝对值仍然是-2147483648?

abs(-2147483648)的结果是-2147483648,不是吗?这似乎是不可接受的.

printf("abs(-2147483648): %d\n", abs(-2147483648));
Run Code Online (Sandbox Code Playgroud)

输出:

abs(-2147483648): -2147483648
Run Code Online (Sandbox Code Playgroud)

c libc

23
推荐指数
4
解决办法
2万
查看次数

libc_nonshared.a 的目的是什么?

为什么libc_nonshared.a存在?它的目的是什么?我一直无法在网上找到关于它存在的好答案。

据我可以告诉它提供了某些符号(statlstatfstatatexit,等等)。如果有人在他们的代码中使用这些函数之一,它将被链接到这个存档中的最终可执行文件。这些函数是 POSIX 标准的一部分并且非常常见,所以我不明白为什么它们不会分别放在 shared 或 staticlibc.so.6或 中libc.a

c glibc libc

23
推荐指数
2
解决办法
1147
查看次数