2014-03-19 101 views
1

當我在我的電腦上運行我的程序時,一切都按預期工作。但最近我已經將應用程序移動到運行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。

+0

除非我誤會,否則您正在調用'exit(signum)'來強制終止程序,並且不執行後面的代碼。 – CoryKramer

+0

@Cyber​​這是他的信號處理程序,除非發出信號才執行。 –

+0

@瑞克,但如果出現信號,您會退出,並顯示正面退出代碼。 –

回答

0

http://linux.die.net/man/2/signal 注意催促你的部分使用sigaction因爲signal不是很便攜。

+0

雖然這是真的,並且可能會在稍後導致問題,但我在我的機器和電子白板上運行Ubuntu 12.04以及使用相同版本的g ++編譯應用程序。因此,它們之間不應存在可移植性問題。 – Rick