错误:LNK1104无法打开文件“ pthread.lib”

时间:2018-12-12 22:59:35

标签: c++ cmake visual-studio-2017 pthreads webrtc

我正在尝试使用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进行哪些必要的更改?

P.S:我已经将pthread标头,dll和libs手动添加到Visual Studio目录中。

2 个答案:

答案 0 :(得分:1)

您需要我们提供实际的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进行程序包管理,并使用以下命令安装了pthread:

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

我的软件包库目录为“ C:\ vcpkg \ installed \ x64-windows \ lib” 我还必须将以下内容添加到我的项目设置中,因为vcpkg不会自动集成:

  • 转到项目属性->配置属性-> VC ++目录,并将“ C:\ vcpkg \ installed \ x64-windows \ include”添加到“包含目录”中
  • 转到项目属性->配置属性-> VC ++目录并将“ C:\ vcpkg \ installed \ x64-windows \ lib”添加到库目录

答案 1 :(得分:0)

如果唯一的错误是“缺少pthread库”,则可以使用pthread-w32。我们已经在一些需要pthread的跨平台应用程序中成功使用了它。

它们具有适用于64位和32位的库。您可以下载并将其添加到您的项目中。您没有提到您的工具集-它们的库的名称取决于您的工具集(MSVC或GNU),因此您需要选择正确的工具集。签出他们的FAQ

希望有帮助。