相关文章推荐
另类的紫菜汤  ·  ChatGPT ...·  1 年前    · 
霸气的骆驼  ·  使用 Azure Cosmos DB ...·  1 年前    · 
阳刚的烤地瓜  ·  Pricing - Azure ...·  1 年前    · 

错误。LNK1104不能打开文件'pthread.lib'。

3 人关注

我正试图在Windows中使用Visual Studio 2017编译一个本地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 个评论
对于pthreads,请看这个答案: stackoverflow.com/a/2150957/1076479 我知道的不多,不能确定,但我怀疑pthreads只是这个冰山一角。
当你把一个项目从linux移植到windows时,这不仅仅是一个编译器的问题。线程是一个很好的例子,说明你需要在你的代码中改变什么。看看你是否能在你的代码中找到像WIN32或LINUX这样的定义,也许是写代码的人提供了这个选项
c++
cmake
visual-studio-2017
pthreads
webrtc
Kazi Hasan
Kazi Hasan
发布于 2018-12-13
2 个回答
mesibo
mesibo
发布于 2020-09-16
0 人赞同

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

他们有适用于64位和32位的库。你可以下载并把它添加到你的项目中。你没有提到你的工具集--他们的库根据你的工具集(MSVC或GNU)有不同的命名,所以你需要选择正确的。请查看他们的 FAQ

希望能有所帮助。

该链接下面列出的最后一个版本是2012年的,他们在 sourceforge.net/projects/pthreads4w 似乎有较新的(2018年)版本。
VoteCoffee
VoteCoffee
发布于 2020-09-16
0 人赞同

你需要我们的实际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"