在將 TCPMP (The Core Pocket Media Player) 移植或編譯至 Windows CE / SiRF A4 平台時,常遇到啟動即崩潰並產生 crash.txt 的情況,且原始碼未做任何修改。這通常非程式邏輯錯誤,而是編譯環境、鏈接庫或平台 API 相容性導致。
TCPMP 依賴特定的多媒體解碼庫 (如 ffmpeg、libmad、libogg 等)。若編譯時靜態鏈接不完整,或目標裝置缺少對應 DLL,啟動時會因找不到符號而崩潰。
depends.exe (Dependency Walker) 分析編譯出的 EXE,確認所有 DLL 依賴是否滿足。.lib 檔案,並將對應 DLL 部署至裝置同目錄或系統目錄。Windows CE 平台常使用 eMbedded Visual C++ 4.0 (eVC4) 或 Visual Studio 2005/2008。若專案原始碼使用 C++ 標準庫功能 (如 STL、異常處理),但鏈接的 CRT 版本與目標裝置不符,會導致啟動崩潰。
C/C++ → Code Generation → Runtime Library 設定 (如 /MD vs /MT)。SiRF A4 基於 ARM 架構,若編譯選項開啟了不支援的指令集 (如 VFP、NEON) 或結構體對齊方式與系統 API 不一致,會觸發非法指令或資料對齊錯誤。
/QRarch4、/QRfpe-),並確保 #pragma pack 與系統頭檔一致。此問題在早期 CSDN 論壇有詳細討論,關鍵字:「TCPMP播放器移植到SiRF A4 WinCE6.0上那個crash.txt問題是怎麼解決」。核心結論通常指向 缺少特定的解碼器插件 DLL 或 註冊表路徑配置錯誤 導致插件載入失敗。
crash.txt 內容:若為 Access Violation 或 Undefined Instruction,多半是指令集/對齊問題;若為 DLL Not Found 則是依賴缺失。cmd 手動執行程式,觀察控制台輸出。.dll、.plg (插件) 是否完整部署。Makefile 或 .vcproj 直接建置,避免手動建立專案時遺漏設定。若以上嘗試仍無法解決,建議提供完整的 crash.txt 內容、編譯輸出日誌 (Build Log) 以及目標裝置的 OS 版本 (如 WinCE 6.00 Build 1400),以便進一步分析。