mini 2440開発ボードがQtプログラムを実行してSegmentation faultが現れるもう一つの奇抜な原因:Ubuntuの下でFileZillaを使ってFTP方式でプログラムを転送する


QWT-6.1.2を使用してdataplotという小さなプログラムを書きました.Ubuntuでは正常に動作し、クロスコンパイル後に開発ボードに転送され、実行され、エラー:Segmentation faultと報告されました.
ホスト環境:Ubuntu 12.04+gcc 4.6.3+Qt 4.8.1
開発環境:arm-linux-gcc 4.4.3 with EABI+QtE 4.6.3(いずれもmini 2440公式提供) 
解決プロセス
ネット上でたくさんの資料を調べて、各種はQtライブラリを再コンパイルして、クロスコンパイラを交換してなど、本当に少し煩雑で、私の情況に合致することを保証することができなくて、先日クロスコンパイルしたいくつかの小さいプログラムは運行することができて、qtライブラリとqwtライブラリの問題ではないべきです.
問題を簡略化するためにdataplotコードを直接修正し、ヒント情報を表示するlabelラベルを1つだけ残しておくと、これ以上簡単ではありません.それからクロスコンパイルして、開発ボードに伝えて、依然としてSegmentation fault、おかしいです!開発ボードのもっと複雑なQtプログラムはすべて実行したことがあって、どうして今日はだめですか?
プログラムの問題ではないはずですが、さらに範囲を縮小するために、先日コンパイルされ、2440で正常に実行できるqwt_testプログラムを再クロスコンパイルして、開発ボードに伝えても、依然としてSegmentation faultで、まったく科学的ではありません.
奇抜だが、コードの問題でもライブラリやコンパイラの問題でもないことも検証された.
今回、先日のデバッガとの唯一の違いは、使用していたFTP転送ソフトが違うことだと思います.ブロガーはFTP方式でプログラムを開発ボードに転送してきたが、これまでwindowsの下でFlashFXPを通じてQtプログラムを開発ボードに転送していたが、今日は手間を省くためにUbuntuの下でFileZillaを使ってプログラムを開発ボードに直接転送した.
試しに、VMwareの共有を開き、Ubuntuでdataplotプログラムを/mnt/hgfs/ubuntu shareディレクトリ(このディレクトリは実際にWin 7ホストE:/Ubuntu Shareディレクトリ、パーティションフォーマットはNTFS)に直接コピーし、WindowsでFlashFXPを開き、Ubuntu Share目に録画したdataplotプログラムを開発ボードに転送します.転送時にFlashFXPでは、同じ名前でも異なるサイズの新しいファイル(問題はここにあるのか?)が上書きされ、上書きが確認されます.開発ボードでdataplotプログラムを実行し、正常に実行しました!
問題は解決したが、原因ブロガーはまだ分からないので、どなたかご存知の方がいらっしゃいましたらお知らせください.
参考までに、ブロガーUbuntu下のFileZillaバージョンは直接apt-getの3.5.3バージョン、Windows下のFlashFXPは5.0.0バージョン
================================================================================
QtプログラムSegmentation faultをネットワーク上で解決する方法をまとめ、必要に応じて
クロスコンパイラを交換してみます
多くの友人はQt-embedded 4.xxを移植する際にフレンドリーアーム社が提供するクロスコンパイラを使用しています.QtとQtアプリケーションはコンパイルに成功しましたが、Qtアプリケーションを実行する際によくセグメントエラー(Segmentation Fault)が発生し、openmoko(オープンソース携帯電話プロジェクト)が提供するコンパイラを使ってみることができます.同じEABIでも、バージョン4.1.2http://www.qtopia.net/modules/mydownloads/singlefile.php?lid=38 Qtアプリケーションを実行してもセグメントエラーは発生しません(Segmentation Fault).
Qtプログラム実行パラメータの変更
"QWS"だと思いますSIZEの設定の問題、私は1つのプログラムQWSがありますSIZE=320 x 240で運転可能になり、QWS_に設定SIZE=320 x 480でセグメントエラー」
「中国語フォントの問題、実行プログラム使用./myQtApp-qws-fn SIMMHEI」
Qtライブラリを変更して再コンパイル
プログラムqt-embedded-linux-opensource-src-4.5.0/src/gui/embedded/qscreenlinuxfb_qws.cppは、次のように変更されます.
410 :
/*            //EmbedSky_del start 20091208
    canaccel = useOffscreen();
    if(canaccel)
        setupOffScreen();
*/            //EmbedSky_del end 20091208
    canaccel = false;

706 :
/*                //EmbedSky_del start 20091208
    if (canaccel) {
        *entryp=0;
        *lowest = mapsize;
        insert_entry(*entryp, *lowest, *lowest);  // dummy entry to mark start
    }
*/                //EmbedSky_del end 20091208
    canaccel = false

segmentation faultの問題を解決する可能性がありますので、テストしてください.
Qscreenlinuxfb_qws.hを修正し、フレンドリーなアームで提供されたarm-linux-gcc-4.3.2.tgzでQT 4.5.0-arm(release方式)を再コンパイルし、2つのプログラムを正常に実行してみました.
NOTE: This is a HACK, and not a pretty one either. It makes sure that it hardcoded doesn't use off-chip graphic memory. I don't use off-chip graphic memory, but if you do, this hack is useless.
その他
  • 「ソースコードに余分なスペースがある場合があるので、やめましょう!」
  • 「私のはFLASHの書き込みが間違っていた」
  • ""は時々私たちが書いたプログラムの問題です.例えば、char buff[7]=「Hello」と書きました.Segmentation Faultセグメントのエラーが発生しますが、strcpy(buff、「Hello」);後でありません!おかしいですか?」
  • 「QTのアプリケーションインタフェースのサイズが超えているため、以前出会ったことがあります」
  • 「プログラムが破損しているか、開発プログラム用のQtライブラリと導入用のQtライブラリが一致していない」
  • 参考資料
    Qt-embedded 4.xx実行Segmentation Faultセグメントエラーの解決方法
    実行qt/embedded 4.4.2 segmentation fault
    Qt:Segmentation fault問題の解決方法