青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

dede

在windows中,用mingw編譯hans boehm gc 7.1

在跨平臺開發中,跨越系統、編譯器、匯編語法是經常碰到的事情,前段時間就為在mingw下編譯hans boehm gc傷神過。

現把我的解決過程記錄如下。

首先,請確保您已安裝好msys、mingw、gcc4.3.3編譯環境,gcc4.3.3為我所用的版本,如有新版,那么更好。
codeblocks用戶請暫時放棄IDE環境,習慣一下bash吧。

接下來,在msys目錄中運行msys.bat


啟動windows下的bash環境。哦,msys的叫sh,反正都是xxsh,也不用太講究了。

接下來,進入您下載的hans boehm gc 7.1解壓目錄,鍵入:

./configure --enable-shared=no --enable-static=yes --enable-cplusplus --enable-large-config --enable-parallel-mark --enable-threads=win32

為什么后面要配置這么多呢,讓我一項一項解說一下吧:
--enable-shared=no      是否編譯動態庫,我個人選否,所以填的=no,如果要編譯為動態庫,那記得把這個改為=yes啊
--enable-static=yes     是否編譯靜態庫,我個人選是,所以填的=yes,如果要編譯為動態庫,那記得把這個改為=no啊
                        所以呢,記得,上面這兩項最好反著填
--enable-cplusplus      允許c++
--enable-large-config   允許申請大塊內存的配置
--enable-parallel-mark  允許并發環境的標記,多線程環境一定得加上這一項
--enable-threads=win32  線程模型,這里為win32(話說當初在doc目錄里看了好久,都沒翻到到底有那幾個模型標志,索性在configure.ac里自己翻出來得了)

好了,現在輸入回車,autoconf會自動為您配置好makefile。

接下來呢,make吧:

make

呃,這里,編譯到某個文件的時候,會報一個錯:

libatomic_ops/src/atomic_ops/sysdeps/gcc/x86.h (114)
inline asm error : input constraint with a matching output constraint of incompatible type
!

哇咧,這是蝦米錯誤,gc干匯編貂事情?。?br>沒辦法,hans boehm還寫過一個libatomic_ops(原子操作庫),自家人當然更喜歡用自家庫咯。
好吧,看看到底是什么問題,改改看先。
打開x86.h,定位到114行,發現如下代碼:

  unsigned char oldval;
  
/* Note: the "xchg" instruction does not need a "lock" prefix */
  __asm__ __volatile__(
"xchgb %0, %1"
        : 
"=q"(oldval), "=m"(*addr)
        : 
"0"(0xff), "m"(*addr) : "memory");


天殺的,gcc嵌入的匯編啊,看著頭會很疼的啊...

趕緊翻翻AT&T語法,再找找gcc asm資料,哦,知道了gcc嵌入匯編語法如下:

__asm__(匯編語句模板: 輸出部分: 輸入部分: 破壞描述部分)

前面說輸入跟輸出的類型約束不匹配,那先看*addr,這個玩意在輸入跟輸出里長得一個模樣嘛,應該不是它的問題
剩下的就是 oldval 跟 0xff 了,這兩一個是 unsigned char ,一個是立即數,當然配不上了,不過這個0xff也太
magic num了吧,到底是啥東西啊,回頭,打開libatomic_ops/src/atomic_ops/sysdeps/msftc下的x86.h

看看同樣的函數里,vc里咋寫的:

    __asm
    {
    mov    eax,AO_TS_SET        ;
    mov    ebx,addr        ;
    xchg    
byte ptr [ebx],al    ;
    }

噢噢,是AO_TS_SET,這樣有意義多了嘛,好了,我們改這么一改:

  __asm__ __volatile__("xchgb %0, %1"
        : 
"=q"(oldval), "=m"(*addr)
        : 
"0"((unsigned char)AO_TS_SET), "m"(*addr) : "memory");


可能有同學會問,為什么0xff可以直接換成上面這個樣子了,這可是匯編啊
恩,介個嘛,括號里的東西還是按c/c++語法來的,gcc會認的,放心咯。

恩,再編譯吧:

make

……
……
……

當當當當,編譯完成,到.libs目錄里翻libgc.a去吧

附注:還記得前面的--enable-shared=no --enable-static=yes么
如果你配置了--enable-static=yes,卻沒有配置--enable-shared=no
那么在make快結束,生成庫的時候,你就會看見一串的以GC_開頭的未定義符號
這是為啥咧,就因為允許了生成靜態庫,確沒有禁止生成動態庫,配置出來的
makefile默認會先生成動態庫,也就是在未定義符號錯誤前你會發現:

gcc -shared

字樣,這是在生成動態庫,然而允許靜態庫時禁用了所有的導出符號,鏈接動態庫就咯屁咯。

所以,要么--enable-shared=no --enable-static=yes,要么--enable-shared=yes --enable-static=no

免得出錯。

終于寫完了,您也看完了,那么,下回見了。

posted on 2009-05-23 19:57 dede 閱讀(3063) 評論(1)  編輯 收藏 引用

評論

# re: 在windows中,用mingw編譯hans boehm gc 7.1[未登錄] 2010-05-07 11:46 William wang

非常好.

我正在編譯ECL 10.3.1,google 到了你的文章。

  回復  更多評論   


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


導航

<2007年8月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

統計

常用鏈接

留言簿(1)

隨筆檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一级片在线观看| 小嫩嫩精品导航| 欧美国产欧美亚洲国产日韩mv天天看完整 | 久久gogo国模啪啪人体图| aaa亚洲精品一二三区| 欧美日韩成人免费| 一本色道久久加勒比精品| 一本到高清视频免费精品| 国产精品v欧美精品v日韩| 午夜激情久久久| 久久精品欧美| 亚洲日韩视频| 中文日韩欧美| 国产欧美日韩精品丝袜高跟鞋| 久久精品国产69国产精品亚洲| 久久福利视频导航| 亚洲国产精品一区在线观看不卡| 欧美成人一区二区三区| 欧美精品三级| 久久福利毛片| 女人天堂亚洲aⅴ在线观看| 在线综合亚洲欧美在线视频| 亚洲免费婷婷| 在线国产精品一区| 亚洲美女网站| 国产午夜精品美女视频明星a级| 蜜臀a∨国产成人精品| 欧美激情精品久久久| 性久久久久久久久久久久| 久久欧美肥婆一二区| 一级日韩一区在线观看| 欧美一区二区三区四区高清| 亚洲人妖在线| 欧美一区二区三区精品| 亚洲伦理在线免费看| 午夜欧美电影在线观看| 亚洲精品社区| 久久久亚洲高清| 亚洲在线免费视频| 美女免费视频一区| 欧美在线观看视频一区二区| 欧美精品激情在线| 麻豆精品国产91久久久久久| 国产精品日韩一区二区三区| 亚洲国产精品国自产拍av秋霞| 国产精品视频专区| 亚洲激情电影中文字幕| 精品白丝av| 亚洲伊人一本大道中文字幕| 亚洲人体大胆视频| 久久视频国产精品免费视频在线| 午夜精品免费在线| 欧美人与性动交cc0o| 免费不卡在线观看av| 国产欧美精品久久| 一区二区三区欧美| 日韩午夜免费| 欧美激情成人在线视频| 免费高清在线视频一区·| 国产日韩欧美二区| 国产精品99久久久久久久女警| 99精品视频一区| 欧美大胆人体视频| 欧美风情在线观看| 136国产福利精品导航| 欧美在线精品一区| 久久精品国产69国产精品亚洲| 国产伦精品免费视频| 亚洲资源在线观看| 欧美一区二区三区视频免费播放| 国产精品国产三级国产aⅴ无密码| 妖精视频成人观看www| 在线一区二区三区四区| 欧美三级特黄| 亚洲午夜小视频| 欧美尤物一区| 国产一区在线播放| 久久久99国产精品免费| 理论片一区二区在线| 在线色欧美三级视频| 久久国产免费看| 欧美 日韩 国产一区二区在线视频 | 欧美精品性视频| 欧美激情一区二区久久久| 亚洲人成艺术| 欧美日韩影院| 午夜久久黄色| 欧美福利视频一区| 99国产精品视频免费观看一公开| 欧美激情一区二区三区在线视频观看 | 亚洲人体1000| 欧美色图五月天| 亚洲免费视频观看| 久热综合在线亚洲精品| 亚洲激情在线视频| 欧美视频久久| 欧美中文字幕在线播放| 欧美激情一区二区三区全黄 | 99国产精品久久久久老师| 国产精品高潮呻吟视频| 亚洲欧美日韩国产一区| 久久噜噜噜精品国产亚洲综合| 亚洲精品日日夜夜| 国产精品免费观看在线| 久久米奇亚洲| 中文日韩在线| 欧美电影在线观看完整版| 亚洲欧美久久| 亚洲第一精品夜夜躁人人爽| 欧美日韩一区国产| 久久国产精品99国产| 亚洲欧洲综合| 久久综合九色九九| 亚洲一区美女视频在线观看免费| 国产在线观看精品一区二区三区| 欧美精品一区二| 欧美日韩一区二区三区| 亚洲一区亚洲| 91久久夜色精品国产九色| 欧美中文字幕久久| 一本久久综合| 亚洲电影观看| 国产欧美日韩亚洲精品| 欧美日本不卡| 另类激情亚洲| 性欧美1819sex性高清| 亚洲精选久久| 亚洲国产精品久久久久久女王| 欧美在线影院在线视频| 一区二区三区精品在线| 1769国产精品| 精品1区2区3区4区| 国产日韩欧美在线看| 国产精品大片wwwwww| 欧美国产日韩精品免费观看| 久久婷婷人人澡人人喊人人爽 | 久久在线91| 性做久久久久久久久| 夜夜嗨av一区二区三区四季av| 亚洲国产精品www| 国产一区二区三区视频在线观看| 国产精品v一区二区三区| 欧美久久99| 欧美激情二区三区| 欧美劲爆第一页| 欧美精品在线观看播放| 欧美jjzz| 欧美巨乳在线观看| 欧美激情综合亚洲一二区| 欧美成人午夜激情| 欧美电影免费网站| 欧美激情中文不卡| 欧美日韩国产精品一区二区亚洲| 欧美肥婆在线| 欧美日韩国产高清视频| 欧美日韩精品一区| 欧美午夜精品久久久久久孕妇| 欧美图区在线视频| 国产精品一区二区欧美| 国产日韩精品综合网站| 激情偷拍久久| 亚洲日本欧美日韩高观看| 9久re热视频在线精品| 99视频在线精品国自产拍免费观看| 日韩小视频在线观看专区| 中国女人久久久| 午夜精品福利在线| 久久久综合精品| 欧美成人免费观看| 亚洲激情社区| 亚洲一区二区在| 久久精品在线| 欧美另类在线播放| 国产精品视频一二三| 黄色亚洲免费| 一区二区三区成人 | 好看的亚洲午夜视频在线| 精品9999| 亚洲欧美日韩精品久久亚洲区 | 午夜精品影院在线观看| 久久久久久午夜| 欧美日韩黄色一区二区| 国产欧美日韩视频| 美女精品国产| 亚洲国产精品嫩草影院| 亚洲一级黄色片| 欧美阿v一级看视频| 国产精品嫩草影院一区二区| 亚洲大片在线观看| 亚洲资源av| 亚洲国产精品一区二区第一页 | 亚洲女女女同性video| 欧美a级大片| 国产精品一级在线| 亚洲人人精品| 蜜桃av一区| 性欧美8khd高清极品| 欧美三级视频在线| 亚洲日本va在线观看| 久久久7777|