簡體   English   中英

錯誤:LNK1104 無法打開文件“pthread.lib”

[英]Error : LNK1104 cannot open file 'pthread.lib'

我正在嘗試使用 Visual Studio 2017 在 Windows 中編譯原生 Linux C++ 應用程序。該應用程序使用 WebRtc 的聲學回聲消除 (AEC) API 來消除 wav 文件上的回聲。 以下是 CmakeLists.txt 文件:

cmake_minimum_required(VERSION 2.8)
project(wav-aec)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
add_subdirectory(gflags)
add_definitions("-DWEBRTC_NS_FLOAT -DWEBRTC_WIN -DNOMINMAX")

#-DWEBRTC_UNTRUSTED_DELAY -DWEBRTC_LINUX -DWEBRTC_POSIX 

include_directories(
    webrtc
    webrtc/webrtc/common_audio/signal_processing/include
    webrtc/webrtc/modules/audio_coding/codecs/isac/main/include
)

set(WEBRTC_SRC_
    base/buffer.cc
    base/checks.cc
    ...
    ...
    #system_wrappers/source/rw_lock_posix.cc
    system_wrappers/source/trace_impl.cc
    #system_wrappers/source/trace_posix.cc
)

function(prepend_path var prefix)
   set(listVar "")
   foreach(f ${ARGN})
      list(APPEND listVar "${prefix}/${f}")
   endforeach(f)
   set(${var} "${listVar}" PARENT_SCOPE)
endfunction(prepend_path)

prepend_path(WEBRTC_SRC webrtc/webrtc ${WEBRTC_SRC_})

add_executable(webrtc-audioproc webrtc-audioproc.cpp ${WEBRTC_SRC})
target_link_libraries(webrtc-audioproc gflags pthread)

當我嘗試構建它時,出現以下錯誤:錯誤:LNK1104 無法打開文件“pthread.lib”

這是項目唯一依賴 linux 的源文件(cpp)的鏈接: https ://github.com/lschilli/wav-aec/blob/master/webrtc-audioproc.cpp

將代碼從 Linux 移植到 Windows 的正確方法是什么? Windows 中的 gflags 和 pthread 是什么? 需要對 CmakeLists.txt 進行哪些必要的更改?

PS:我已經手動將 pthread 頭文件、dll 和 libs 添加到 Visual Studio 目錄中。

如果“缺少 pthread 庫”是唯一的錯誤,您可以使用pthread-w32 我們已經在一些需要 pthread 的跨平台應用程序中成功地使用了它。

他們有 64 位和 32 位的庫。 您可以下載並將其添加到您的項目中。 您沒有提到您的工具集——它們的庫根據您的工具集(MSVC 或 GNU)命名不同,因此您需要選擇正確的工具集。 查看他們的常見問題解答

希望能幫助到你。

您需要向我們提供實際的 lib 文件,該文件通常不是“pthread.lib”。 它很可能是“pthreadVC3.lib”或“pthreadVC2.lib”。 通過查看源包的 lib 目錄找到實際名稱。 您可能會在其中看到其他 lib 文件,例如“pthreadVCE3.lib”和“pthreadVSE3.lib”,但您想鏈接“pthreadVC3.lib”。

您可以在項目設置中添加它,也可以添加以下代碼:

#pragma comment(lib,"pthreadVC3.lib")

將其添加到項目設置中:

  • 轉到項目屬性->配置屬性->鏈接器->常規並將您的庫路徑添加到附加庫目錄
  • 轉到項目屬性->配置屬性->鏈接器->輸入並將lib文件(例如“pthreadVC3.lib”)添加到附加依賴項

確保你有正確的 pthread 版本來匹配你的編譯設置,即 x86/x64。

就我而言,我使用 VCPkg 進行包管理,並使用以下命令安裝了 pthreads:

vcpkg install pthread:x86-windows
vcpkg install pthread:x64-windows

我的包 lib 目錄是“C:\vcpkg\installed\x64-windows\lib”我還必須將以下內容添加到我的項目設置中,因為 vcpkg 沒有自動集成:

  • 轉到項目屬性->配置屬性->VC++ 目錄並將“C:\vcpkg\installed\x64-windows\include”添加到包含目錄
  • 轉到項目屬性->配置屬性->VC++ 目錄並將“C:\vcpkg\installed\x64-windows\lib”添加到庫目錄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM