当我在计算机上运行程序时,一切都按预期工作。但最近我将应用程序移动到了一个运行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。