一次跨平台程式崩潰問題

2021-10-07 10:47:27 字數 848 閱讀 3164

最近接手乙個程式移植的專案。原專案是執行在vxworks下的c**,同時還提供了windows平台的工程。現在需要將其改造成arm版linux下和windows下跨平台的程式。原**中也包含windows和linux兩個平台程式。改造過程只是對arm版進行適應性修改,對部分功能進行補充。

但是在除錯過程中卻出現了windows下面正常,linux下面程式 崩潰的問題。

經過不斷的刪除和比較**,終於定位到了問題。

有乙個原始檔裡要用到目錄檔案遍歷,**中使用了opendirreaddir,並且開頭包含了#include

但是由於windows下無法使用這幾個函式,也沒有這個標頭檔案,所以,原專案中自己實現了乙個dirent,包含dirent.h和dirent.c

定位到了問題下一步就是解決問題。

首先想到的是可能這兩個檔案沒有條件編譯,讓編譯器把這兩個檔案編譯進去了,導致函式錯誤。於是把這兩個檔案的內容都加上條件編譯,直接斷絕後路,可是編譯之後,仍然奔潰。

後來直接把這兩個檔案刪掉,再編譯就好了。

可是,刪掉也不是辦法,比較windows版還是需要的。

那麼問題出在了**呢?推測如下:

雖然兩個檔案裡面都加了條件編譯,裡面的**並未生效,但是因為linux版要#include, 所以編譯器要去找dirent.**件,由於資料夾中包含這個檔案,所以會使用這個檔案,即使在編譯器看裡面是空的,找到之後也就不會再去找系統資料夾裡的dirent.h,所以會出錯。但是當把檔案刪除後,編譯器只能找到正確的dirent.**件。

找到了問題,解決就簡單了,不能刪除,但是可以改名,只要把頭檔案的名稱改了,就一切正常了。

開源跨平台程式崩潰抓取工具 breakpad

google的breakpad很強大,因為他是開源和跨平台的。第三步 cmd進入命令列視窗輸入 set path path c python27 我的python安裝在c python27下 第四步 用python編譯breadpad.cmd進入breadpad的目錄 f cg work break...

Erlang程式的跨平台問題

用erlang寫出的程式,如果使用依賴某一作業系統的專有技術,會在其他系統上跑不起來。最近,學用mochiweb過程中,在windows的cygwin中遇到了這個問題。開啟瀏覽器,http localhost 8000 出現網頁,程式執行正常。但是,由於mochiweb是在linux上開發的,使用了...

記一次nginx解決跨域問題

關於跨域是什麼 產生跨域的條件等基礎概念,我就不在此記錄了。我們直接來看nginx解決跨域的方法。對於簡單請求新增響應頭 location 或者 http新增完成後,reload過載nginx配置檔案。可以在網路請求中驗證是否加入成功,如果上面方法不管用,那你就要看你的跨域請求是不是options了...