當我在我的電腦上運行我的程序時,一切都按預期工作。但最近我已經將應用程序移動到運行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這是他的信號處理程序,除非發出信號才執行。 –
@瑞克,但如果出現信號,您會退出,並顯示正面退出代碼。 –