我正在尝试使用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目录中。
答案 0 :(得分:1)
您需要我们提供实际的lib文件,该文件通常不是“ pthread.lib”。最有可能是“ pthreadVC3.lib”或“ pthreadVC2.lib”。通过在源程序包的lib目录中查找实际名称。您可能会在其中看到其他lib文件,例如“ pthreadVCE3.lib”和“ pthreadVSE3.lib”,但您想要链接“ pthreadVC3.lib”。
您可以在项目设置中添加此代码,也可以添加以下代码:
#pragma comment(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不会自动集成:
答案 1 :(得分:0)
如果唯一的错误是“缺少pthread库”,则可以使用pthread-w32。我们已经在一些需要pthread的跨平台应用程序中成功使用了它。
它们具有适用于64位和32位的库。您可以下载并将其添加到您的项目中。您没有提到您的工具集-它们的库的名称取决于您的工具集(MSVC或GNU),因此您需要选择正确的工具集。签出他们的FAQ。
希望有帮助。