首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误: LNK1104无法打开文件“pthread.lib”

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

Stack Overflow用户
提问于 2018-12-12 22:59:34
回答 2查看 4.3K关注 0票数 3

我正在尝试使用VisualStudio2017在Windows中编译一个本地的Linux C++应用程序。该应用程序使用WebRtc的声回声消除(AEC) app来否定wav文件上的回波。以下是CmakeLists.txt文件:

代码语言:javascript
复制
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依赖源文件的链接:https://github.com/lschilli/wav-aec/blob/master/webrtc-audioproc.cpp

将代码从Linux移植到windows的正确方法是什么?什么是Windows等效的g标志和线程?需要对CmakeLists.txt进行哪些必要的更改?

P.S:我已经手动向Visual目录中添加了p线程头、dll和libs。

EN

回答 2

Stack Overflow用户

发布于 2018-12-13 09:00:00

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

他们有64位和32位的库。您可以下载并将其添加到项目中。您还没有提到您的工具集--它们的库根据您的工具集(MSVC或GNU)的不同命名,因此您需要选择正确的一个。看看他们的常见问题

希望能帮上忙。

票数 1
EN

Stack Overflow用户

发布于 2020-09-16 02:30:06

您需要实际的库文件,它通常不是"pthread.lib“。它最有可能是“pTHERVC3.lib”或“pTERNEVC2.lib”。通过查看源包的lib目录来查找实际名称。您可能会在其中看到其他lib文件,如“pTHERVCE3.lib”和“pTHERVSE3.lib”,但您希望链接“pTHERVC3.lib”。

可以将其添加到项目设置中,也可以添加以下代码:

代码语言:javascript
复制
#pragma comment(lib,"pthreadVC3.lib")

要将其添加到项目设置,请执行以下操作:

  • 转到项目属性->Configuration>Linker->General,并将库路径添加到其他库目录
  • 转到项目属性->Configuration>Linker->Input,并将lib文件(如“pTERVC3.lib”)添加到其他依赖项中

确保您拥有与编译设置(即x86/x64 )匹配的正确版本的p线程。

在我的例子中,我使用VCPkg进行包管理,并使用以下命令安装p线程:

代码语言:javascript
复制
vcpkg install pthread:x86-windows
vcpkg install pthread:x64-windows

而且我的包库目录是"C:\ vcpkg \installed\x64-windows\ lib“,另外,由于vcpkg不是自动集成的,所以我不得不将以下内容添加到我的项目设置中:

  • 转到项目属性->Configuration>VC++目录,并添加"C:\vcpkg\installed\x64-windows\ Include“以包含目录
  • 转到项目属性->Configuration>VC++目录,并在库目录中添加"C:\vcpkg\installed\x64-windows\lib“
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53752689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档