■■■■■■□■■■■■■□■■■■■■□□□□□■■□■■■■■■
■■□□■■□■■□□■■□■■□□□□□■■■■■■□■■□□□□
■■□□■■□■■□□■■□■■□□□□□■■□□■■□■■■■■■
■■□□■■□■■□□■■□■■□□□□□■■□□■■□□□□□■■
■■□□■■□■■■■■■□■■■■■■□■■■■■■□■■■■■■

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

CDの管理?(2)

何日か前に書いたブログでも触れてるSQLite3を使ったCD管理用プログラムですが、
http://homepage1.nifty.com/kazubon/progdoc/tclock/nodeflib.html
で書かれているファイルサイズを小さくするためにデフォルトライブラリをリンクしない
ってのをやってみました。で、そのときのメモ for MinGW。

まず、WinMainCRTStartupを自分で書かなきゃないのは既述のサイトにあるとおり。
んで、エントリーポイントをココにしなきゃないんですが、
そのままコンパイルしちゃうと関数名にごちゃごちゃしたシンボルがついて
指定しにくくなります(指定できないわけではありません)。
なのでextern "C"を付けます。具体的には
extern "C" void WinMainCRTStartup(void){
とします。すると、_WinMainCRTStartupって名前で指定できるようになります
(なんでアンダースコアが付くかは不明)。

そしてコンパイルする時には
  • デフォルトライブラリをリンクしないように-nostdlibをつける。
  • 必要なライブラリを自分でリンク(-lkernel32とか-luser32とか)
  • エントリーポイントをリンカに指定する
    でリンカへのエントリーポイントの指定ですが、
    -Wl,--entry,_WinMainCRTStartup,--enable-stdcall-fixup
    とします。
    --enable-stdcall-fixup
    関数名が_FooBar@4とか@数字が付いたときに
    勝手にエントリーポイント修正しといたぜ
    ってコンパイラがWARNINGを吐くのでそれを防ぐためです。
    今回は引数がないので(@<引数のバイト数>)必要ありませんが、一応。

    と、まぁたらたら書きましたが、実はエントリーポイントの指定は
    その関数が一番上に来るようにすれば、別に指定しなくてもいけるっぽいです。

    んで、肝心のファイルサイズですが、
    12KB → 8KBになりました。
    もともと中身ないからねぇw

    テーマ:フリーソフト - ジャンル:コンピュータ

    1. 2008/05/16(金) 22:33:39|
    2. フリーソフト
    3. | トラックバック:0
    4. | コメント:0
  • <<Ctrl+SpaceでIMEをON/OFF | ホーム | 楽しみー>>

    コメント

    コメントの投稿


    管理者にだけ表示を許可する

    トラックバック

    トラックバックURLはこちら
    http://nocd5.blog59.fc2.com/tb.php/235-84112d6c
    この記事にトラックバックする(FC2ブログユーザー)
    home

    プロフィール

    Author:nocd5
    30歳(男)
    会社員

    Last.fm



    最近の記事

    カテゴリー

    カレンダー

    10 | 2017/11 | 12
    Sun Mon Tue Wed Thu Fri Sat
    - - - 1 2 3 4
    5 6 7 8 9 10 11
    12 13 14 15 16 17 18
    19 20 21 22 23 24 25
    26 27 28 29 30 - -

    最近のコメント

    最近のトラックバック

    ブロとも申請フォーム

    この人とブロともになる

    ブログ内検索

    Amazonアソシエイト

    RSSフィード

    リンク

    このブログをリンクに追加する

    FC2ブログランキング

    FC2Blog Ranking

    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。