C ++程序退出,代码01没有执行代码

时间:2014-03-19 13:12:17

标签: c++ linux ubuntu arm

当我在计算机上运行程序时,一切都按预期工作。但最近我将应用程序移动到了一个运行Ubuntu 12.04的wandboard dual(与我的计算机相同)。该程序的结构类似于:

...
headers
...

bool continueStuff = true;

log4cplus::Logger makeLogger(std::string str)
{
    ...
    Init custom loggers
    make loggers
    set properties
    return logger
}

log4cplus::Logger logger = makeLogger("MainLogger");
void signalHandler(int signum)
{
    switch(signum)
    {   
        // Fatal signals
        case 1:
        case 2:
        case 3:
        case 4:
        case 6:
        case 8:
        case 9:
        case 10: 
        case 11: 
        case 12: 
        case 13: 
        case 14: 
        case 15: 
            printf("Fatal signal(%d) received. Shutting down\n", signum);
            LOG4CPLUS_FATAL(logger, "Fatal signal(" << signum << ") received. Shutting down.");

            exit(signum);
            break;

        // Non-fatal signals
        default:
            LOG4CPLUS_INFO(logger, "Non-fatal signal(" << signum << ") received.");
    }   
}

...
functions
...

int main()
{
    printf("Starting\n");
    signal(SIGINT, signalHandler);
    ...
}

该程序在wandboard上编译完全正常但是当我运行它时会立即退出。我尝试通过主方法的gdb设置断点,全局变量声明以及在main之前调用的任何构造函数来运行它。我还在所有代码中都有打印语句,这些代码在main之前执行但没有打印任何内容。

我的机器和wandboard上的g ++版本是相同的。 库是完全相同的版本(除了一个)但我不相信这是问题,因为我没有看到任何编译器错误。

我也永远不会返回正退出状态,我的应用程序要么返回0表示成功,要么返回-1表示失败。正如您在上面的代码中所看到的,我还处理了程序收到的所有信号以及打印和错误消息。

更新

valgrind输出:

==18828== Command: ./app
==18828== Parent PID: 18092
==18828==
==18828== Jump to the invalid address stated on the next line
==18828==    at 0x388: ???
==18828==  Address 0x388 is not stack'd, malloc'd or (recently) free'd
==18828==
==18828==
==18828== Process terminating with default action of signal 11 (SIGSEGV)
==18828==  Bad permissions for mapped region at address 0x388
==18828==    at 0x388: ???
==18828==

更新2:

在阅读以下输出后,我使用的是预编译的库:     readelf -AW libPrecompileLib.so 我发现它是为cortex-a9处理器编译的,因为所有的系统库都是为7-A处理器编译的。由于图书馆无法与系统对话,因此它无法运行。

我可以为cortex-a9处理器编译我的应用程序吗?

我试过了:

g++ -mcpu=cortex-a9 -c src.cpp -o app

但由于没有任何内容链接(按照-c),因此它不可执行。一旦我删除了-c,readelf输出就说它是7-A。

1 个答案:

答案 0 :(得分:0)

http://linux.die.net/man/2/signal 请注意,促使您使用sigaction的部分,因为signal不是非常便携。