首页 > 解决方案 > 错误:LNK1104 无法打开文件“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 header、dll 和 libs 到 Visual Studio 目录。

标签: c++cmakevisual-studio-2017pthreadswebrtc

解决方案


如果 'missing pthread library' 是唯一的错误,您可以使用pthread-w32。我们已经在一些需要 pthread 的跨平台应用程序中成功使用了它。

他们有 64 位和 32 位的库。您可以下载并将其添加到您的项目中。您还没有提到您的工具集——它们的库的名称因您的工具集(MSVC 或 GNU)而异,因此您需要选择正确的库。查看他们的常见问题解答

希望能帮助到你。


推荐阅读