当我在我的电脑上运行我的程序时,一切都按预期工作。但最近我已经将应用程序移动到运行Ubuntu 12.04的Wandboard dual(与我的电脑相同)。该程序的结构类似于:用代码01退出的C++程序没有执行代码
...
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);
...
}
该程序编译完美罚款在电子白板上,但是当我运行它立即退出。我试过通过gdb在main方法中设置断点,全局变量声明和main之前调用的任何构造函数来运行它。我在所有在main之前执行的代码中都有打印语句,但没有打印任何内容。
g ++版本与我的机器和电子书板上的版本相同。 库都是相同的版本(除了一个),但我不认为这是问题,因为我没有看到任何编译器错误。
我也永远不会返回一个正面的退出状态,我的应用程序或者返回0成功或-1失败。正如你在上面的代码中看到的,我还处理程序接收到的所有信号,并在退出之前打印并显示错误消息。
UPDATE:
的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处理器编译的,其中所有的系统库都是w已编译为7-A处理器。由于图书馆无法与系统交谈,因此无法运行。
我可以为我的应用程序编译cortex-a9处理器吗?
我曾尝试:
g++ -mcpu=cortex-a9 -c src.cpp -o app
但是由于因为没有被链接(按照-c),它不是可执行文件。然而,一旦我删除了-c,readelf输出就表示它是7-A。
除非我误会,否则您正在调用'exit(signum)'来强制终止程序,并且不执行后面的代码。 – CoryKramer
@Cyber这是他的信号处理程序,除非发出信号才执行。 –
@瑞克,但如果出现信号,您会退出,并显示正面退出代码。 –