BOOST THREAD 想要靜態連結也會有問題?
今天要討論的是 "BOOST THREAD 函式庫的基本使用"
同樣地,我們需要的材料有:
有了上面第三個材料,我們就能開始摟!(前兩個是怎樣?)
首先我們先設定一下,函式庫的路徑以及需要連結的函式庫檔案,這邊我選擇靜態連結的 thread 函式庫。當然,你也可以選擇動態連接版本的函式庫,如果你選擇動態連結的函式庫的話,記得把相關的 dll 檔案複製到你執行檔案的資料夾底下。
再設定完這些之後,我們就可以開始寫 thread 程式啦!這個真的簡單到噴汁 (珍奶啊) ,看看下面的程式碼你就知道啦!
建立一個 thread物件與啟動一個 thread 的作法如下
thread 物件名稱 (可被呼叫的物件);
假設我們要建立一個名為 t1 的 thread 物件,並且啟動他來呼叫 msgfunc1 可以這樣作:
thread t1 (&msgfunc1);
當 t1 被建立時,就會去呼叫 msgfunc1。現在,讓我們多建幾個 thread 來看看效果吧!分別建立四個 thread 物件 t1 到 t4 ,這四個物件分別啟動 msgfunc1 ~ msgfunc4,詳細程式碼如上圖所示。你可以看看每次的輸出都不太一樣歐!
等等!你說你在編譯靜態連結版本時會有問題,然後錯誤訊息又跟下面這串很像:
:\projects\thread_util\Debug/../src/thread_util.cpp:39: undefined reference to `_imp___ZN5boost6thread4joinEv'
C:\projects\thread_util\Debug/../src/thread_util.cpp:40: undefined reference to `_imp___ZN5boost6thread4joinEv'
C:\projects\thread_util\Debug/../src/thread_util.cpp:41: undefined reference to `_imp___ZN5boost6thread4joinEv'
C:\projects\thread_util\Debug/../src/thread_util.cpp:42: undefined reference to `_imp___ZN5boost6thread4joinEv'
C:\projects\thread_util\Debug/../src/thread_util.cpp:38: undefined reference to `_imp___ZN5boost6threadD1Ev'
C:\projects\thread_util\Debug/../src/thread_util.cpp:37: undefined reference to `_imp___ZN5boost6threadD1Ev'
那你可以使用這招,加上 "BOOST_THREAD_USE_LIB" 符號即可。參考下圖,你會發現是這招超簡單的啦!
同樣地,我們需要的材料有:
- 一份雞排加辣
- 一份珍奶半糖去冰
- 一個預先編譯好的 boost thread 函式庫
有了上面第三個材料,我們就能開始摟!(前兩個是怎樣?)
首先我們先設定一下,函式庫的路徑以及需要連結的函式庫檔案,這邊我選擇靜態連結的 thread 函式庫。當然,你也可以選擇動態連接版本的函式庫,如果你選擇動態連結的函式庫的話,記得把相關的 dll 檔案複製到你執行檔案的資料夾底下。
再設定完這些之後,我們就可以開始寫 thread 程式啦!這個真的簡單到噴汁 (珍奶啊) ,看看下面的程式碼你就知道啦!
建立一個 thread物件與啟動一個 thread 的作法如下
thread 物件名稱 (可被呼叫的物件);
假設我們要建立一個名為 t1 的 thread 物件,並且啟動他來呼叫 msgfunc1 可以這樣作:
thread t1 (&msgfunc1);
當 t1 被建立時,就會去呼叫 msgfunc1。現在,讓我們多建幾個 thread 來看看效果吧!分別建立四個 thread 物件 t1 到 t4 ,這四個物件分別啟動 msgfunc1 ~ msgfunc4,詳細程式碼如上圖所示。你可以看看每次的輸出都不太一樣歐!
等等!你說你在編譯靜態連結版本時會有問題,然後錯誤訊息又跟下面這串很像:
:\projects\thread_util\Debug/../src/thread_util.cpp:39: undefined reference to `_imp___ZN5boost6thread4joinEv'
C:\projects\thread_util\Debug/../src/thread_util.cpp:40: undefined reference to `_imp___ZN5boost6thread4joinEv'
C:\projects\thread_util\Debug/../src/thread_util.cpp:41: undefined reference to `_imp___ZN5boost6thread4joinEv'
C:\projects\thread_util\Debug/../src/thread_util.cpp:42: undefined reference to `_imp___ZN5boost6thread4joinEv'
C:\projects\thread_util\Debug/../src/thread_util.cpp:38: undefined reference to `_imp___ZN5boost6threadD1Ev'
C:\projects\thread_util\Debug/../src/thread_util.cpp:37: undefined reference to `_imp___ZN5boost6threadD1Ev'
那你可以使用這招,加上 "BOOST_THREAD_USE_LIB" 符號即可。參考下圖,你會發現是這招超簡單的啦!
留言
張貼留言