【C++ 语言】Visual Studio 配置 POSIX 线程 ( Windows 不支持 POSIX | 配置文件下载 | 库文件说明 | 配置过程 )
文章目錄
- POSIX 線程局限性
- POSIX 線程配置文件下載及目錄說明
- Windows 動態庫與靜態庫
- POSIX 線程配置 ( 項目配置 )
- POSIX 線程配置 ( Windows 動態庫拷貝 | 注意 32 位庫拷貝到 SysWOW64 目錄 | 64 位庫拷貝到 System32 目錄 )
- 配置代碼測試
POSIX 線程局限性
1. POSIX 線程局限性 : 在 Android , Linux , UNIX , MAC 中可以直接使用 POSIX , Windows 不可以直接使用 ;
2. Windows 配置 POSIX 線程 : 在 Visual Studio 上使用 POSIX 線程 , 需要引入第三方動態庫 ;
POSIX 線程配置文件下載及目錄說明
1. 下載 : POSIX 線程 Windows 配置文件下載地址 :
- ① 下載地址 1 : ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip ;
- ② 下載地址 2 : https://jaist.dl.sourceforge.net/project/pthreads4w/pthreads-w32-2-9-1-release.zip ( 推薦 ) ;
2. Pre-built.2 目錄下的相關文件說明 :
- ① dll 目錄 : 存放動態庫目錄 , 其中包含 64位 和 32位 兩種動態庫 ;
下圖是 64 位動態庫 :
下圖是 32 位 動態庫 :
- ② lib 目錄 ; 存放靜態庫的目錄 , 該目錄也是同時包含 64 位 與 32 位 靜態庫 ;
- ③ include 目錄 : 存放頭文件的目錄 ;
Windows 動態庫與靜態庫
動態庫與靜態庫文件說明 :
- ① dll 動態庫文件說明 : 在 Pre-built.2\dll\x64 目錄下 , 是 64 位操作系統的動態庫文件 , Windows 上的動態庫是 .dll 文件 , 在 Android , Linux 上的動態庫是 .so 文件 ;
- ② lib 靜態庫文件說明 : 在 Windows 上靜態庫有兩種 , 一種只是單純的起到引導作用 , 引導如何去鏈接 dll 動態庫 ; 另一種是直接定義了所有的靜態函數 ;
POSIX 線程配置 ( 項目配置 )
1. 拷貝文件 : 將 Pre-built.2 目錄下的 include 和 lib 兩個目錄拷貝到 CMakeLists.txt 所在目錄中 ;
2. CMake 配置 引入頭文件 :
#引入頭文件 include_directories("include")3. CMake 配置 靜態庫 : 用于引導如何鏈接動態庫和靜態庫 , 這里配置自動根據當前是 32 位還是 64 位程序 , 確定靜態庫的配置目錄 ;
#配置自動根據當前是 32 位還是 64 位程序 , 確定靜態庫的配置目錄 if(CMAKE_CL_64)set(platform x64) else()set(platform x86) endif() #配置靜態庫 , 用于引導如何鏈接動態庫和靜態庫 link_directories("lib/${platform}")4. CMake 配置鏈接庫 : 鏈接生成的 005_Thread 和線程動態庫 , 線程動態庫是 lib/x64 下的 pthreadVC2.lib ;
#鏈接生成的 005_Thread 和線程動態庫名字 # 動態庫是 lib/x64 下的 pthreadVC2.lib target_link_libraries(005_Thread pthreadVC2)- 5. CMakeLists.txt 配置宏定義 : 在編譯時會出現 " “timespec”:“struct” 類型重定義 " 報錯信息 , 需要配置宏定義信息 ;
6. 完整的 CMakeLists.txt 配置 :
# CMakeList.txt: 005_Thread 的 CMake 項目,在此處包括源代碼并定義 # 項目特定的邏輯。 # cmake_minimum_required (VERSION 3.8)#引入頭文件 include_directories("include")#配置自動根據當前是 32 位還是 64 位程序 , 確定靜態庫的配置目錄 if(CMAKE_CL_64)set(platform x64) else()set(platform x86) endif() #配置靜態庫 , 用于引導如何鏈接動態庫和靜態庫 link_directories("lib/${platform}")#處理 “timespec”:“struct” 類型重定義 報錯信息 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_STRUCT_TIMESPEC")# 將源代碼添加到此項目的可執行文件。 add_executable (005_Thread "005_Thread.cpp" "005_Thread.h")#鏈接生成的 005_Thread 和線程動態庫名字 # 動態庫是 lib/x64 下的 pthreadVC2.lib target_link_libraries(005_Thread pthreadVC2)# TODO: 如有需要,請添加測試并安裝目標。上面的內容是項目配置內容, 下面是 Windows 系統配置內容 ;
POSIX 線程配置 ( Windows 動態庫拷貝 | 注意 32 位庫拷貝到 SysWOW64 目錄 | 64 位庫拷貝到 System32 目錄 )
拷貝 .dll 動態庫到 Windows 系統中 , 如果 Windows 系統中沒有對應的動態庫 , 運行時會報錯 ;
1. 64 位的 .dll 動態庫 : 將 Pre-built.2\dll\x64 目錄下的兩個 64 位 .dll 動態庫 ( pthreadGC2.dll 和 pthreadVC2.dll ) 拷貝到 C:\Windows\System32 目錄中 ;
- ① Pre-built.2\dll\x64 下的 動態庫 :
- ② 拷貝到 C:\Windows\System32后的動態庫 :
2. 32 位的 .dll 動態庫 : 將 Pre-built.2\dll\x86 目錄下的 5 個 32 位 .dll 動態庫 ( pthreadGC2.dll , pthreadGCE2.dll , pthreadVC2.dll , pthreadVCE2.dll , pthreadVSE2.dll ) 拷貝到 C:\Windows\SysWOW64 目錄中 ;
- ① 32 位 .dll 動態庫 :
- ② 拷貝 32 位 動態庫 : 將 32 位動態庫拷貝到 C:\Windows\SysWOW64 目錄下 ;
配置代碼測試
線程使用代碼 :
// 005_Thread.cpp: 定義應用程序的入口點。 //#include "005_Thread.h" #include <pthread.h>using namespace std;int main() {cout << "Hello CMake。" << endl;//測試 POSIX 線程方法pthread_self();return 0; }CMake 配置文件 :
# CMakeList.txt: 005_Thread 的 CMake 項目,在此處包括源代碼并定義 # 項目特定的邏輯。 # cmake_minimum_required (VERSION 3.8)#引入頭文件 include_directories("include")#配置自動根據當前是 32 位還是 64 位程序 , 確定靜態庫的配置目錄 if(CMAKE_CL_64)set(platform x64) else()set(platform x86) endif() #配置靜態庫 , 用于引導如何鏈接動態庫和靜態庫 link_directories("lib/${platform}")#處理 “timespec”:“struct” 類型重定義 報錯信息 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_STRUCT_TIMESPEC")# 將源代碼添加到此項目的可執行文件。 add_executable (005_Thread "005_Thread.cpp" "005_Thread.h")#鏈接生成的 005_Thread 和線程動態庫名字 # 動態庫是 lib/x64 下的 pthreadVC2.lib target_link_libraries(005_Thread pthreadVC2)# TODO: 如有需要,請添加測試并安裝目標。運行結果 :
總結
以上是生活随笔為你收集整理的【C++ 语言】Visual Studio 配置 POSIX 线程 ( Windows 不支持 POSIX | 配置文件下载 | 库文件说明 | 配置过程 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C++ 语言】文件操作 ( fopen
- 下一篇: 【C++ 语言】线程 ( 线程创建方法