【发布时间】:2017-04-29 21:55:54
【问题描述】:
我有一个自定义的 petalinux 2016.3 系统正在运行并观察以下内容: 当我编译并运行一个使用 system() 调用的 cpp 时,如下例所示:
Oops: kernel access of bad area, sig: 11
CPU: 0 PID: 381 Comm: Application Not tainted 4.6.0 #63
task: ce486500 ti: ce4cc000 task.ti: ce4cc000
我可以在终端中看到所有 3 个回声,但 Oops 出现在“我们永远不会到达这里”printf 之前。当function()返回时,似乎出现了坏区的内核访问。
是否缺少某些特定的内核或 rootfs 模块/设置可能使系统出现这种行为?
我有几千行代码运行其他库函数,而且似乎只有 system() 失败了。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
using namespace std;
void function(){
system("echo hello");
system("echo hello2");
system("echo hello3");
}
int main(int argc, char **argv){
function();
printf("We never get here\n");
return 1;
}
经过更多调试,问题似乎来自于 makefile (lEasyBmp) 中包含的库。
为什么它在不使用时触发了这个确切的失败我还没有发现。所有的库文件都是在系统中构建和找到的,但是如果有人遇到同样的问题,包括一些库可能会触发它。
【问题讨论】:
-
如果你的实际代码在文件范围内有
using namespace std;,你有更大的问题 -
感谢您的提示!我肯定会在代码中摆脱所有 using namespace std。但是它并没有解决糟糕的内核访问问题