我有一个自定义的PetaLinux 2016.3系统运行和遵守下列规定: 当我编译和运行使用系统(CPP)调用类似的例子在我得到:Linux下C++系统()调用崩溃时,函数返回
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模块/设置丢失,可能会导致系统以这种方式运行?
我有几千行代码运行其他库函数,它只是系统()似乎失败。
#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;
}
一些更多的调试后,这个问题似乎来自包含在生成文件(lEasyBmp)库。
为什么它在未使用时触发了这种确切的故障我还没有发现。所有库文件都是在系统中构建和找到的,但是如果任何人有相同的问题,包括一些库可能触发它。
如果您的实际代码'使用命名空间std;'在文件范围内,你有更大的问题 – StoryTeller
[为什么“使用命名空间std”认为是坏练习?](http://stackoverflow.com/q/1452721/995714) –
谢谢你的提示!我肯定会摆脱所有在代码中使用namespace std。但是它不能解决不良的内核访问问题 – btbtbt