Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用libwebrtc音频处理开发工具Cygwin编译程序_C++_Cygwin_Webrtc - Fatal编程技术网

C++ 使用libwebrtc音频处理开发工具Cygwin编译程序

C++ 使用libwebrtc音频处理开发工具Cygwin编译程序,c++,cygwin,webrtc,C++,Cygwin,Webrtc,我想使用webrtc的VAD模块,在Cygwin上编译。 Cygwin为此提供了一些软件包: 我安装了所选的软件包,并想了解如何编译。我已经在下面列出了我迄今为止所做的尝试。我是否采取了正确的方法?还是我应该以另一种方式继续?说到c代码,我是个业余爱好者 main.cpp int main() { AudioProcessing* apm; } #include "audio_processing.h" int main() { AudioProcessing* apm; }

我想使用webrtc的VAD模块,在Cygwin上编译。 Cygwin为此提供了一些软件包:

我安装了所选的软件包,并想了解如何编译。我已经在下面列出了我迄今为止所做的尝试。我是否采取了正确的方法?还是我应该以另一种方式继续?说到c代码,我是个业余爱好者

main.cpp

int main() {
    AudioProcessing* apm;
}
#include "audio_processing.h"
int main() {
    AudioProcessing* apm;
}
编撰

$ g++ main.cpp
main.cpp: In function ‘int main()’:
main.cpp:3:2: error: ‘AudioProcessing’ was not declared in this scope
  AudioProcessing* apm;
  ^
main.cpp:3:19: error: ‘apm’ was not declared in this scope
  AudioProcessing* apm;
$ g++ main.cpp -o main -L/bin/ -lcygwebrtc_audio_processing-1 -I/usr/include/webrtc_audio_processing/webrtc/modules/audio_processing/include/
In file included from main.cpp:1:0:
/usr/include/webrtc_audio_processing/webrtc/modules/audio_processing/include/audio_processing.h:22:35: fatal error: webrtc/base/arraysize.h: No such file or directory
compilation terminated.
因此,我需要包含一些头并链接一个dll,以提供我猜测的实现

$ ls /usr/include/webrtc_audio_processing/webrtc/
base/            common_types.h   system_wrappers/
common.h         modules/         typedefs.h

$ find / -name "*rtc*dll"
/bin/cygsmartcols-1.dll
/bin/cygwebrtc_audio_processing-1.dll
/usr/bin/cygsmartcols-1.dll
/usr/bin/cygwebrtc_audio_processing-1.dll
我在audio_processing.h中找到了包含类AudioProcessing的头文件

main.cpp

int main() {
    AudioProcessing* apm;
}
#include "audio_processing.h"
int main() {
    AudioProcessing* apm;
}
编撰

$ g++ main.cpp
main.cpp: In function ‘int main()’:
main.cpp:3:2: error: ‘AudioProcessing’ was not declared in this scope
  AudioProcessing* apm;
  ^
main.cpp:3:19: error: ‘apm’ was not declared in this scope
  AudioProcessing* apm;
$ g++ main.cpp -o main -L/bin/ -lcygwebrtc_audio_processing-1 -I/usr/include/webrtc_audio_processing/webrtc/modules/audio_processing/include/
In file included from main.cpp:1:0:
/usr/include/webrtc_audio_processing/webrtc/modules/audio_processing/include/audio_processing.h:22:35: fatal error: webrtc/base/arraysize.h: No such file or directory
compilation terminated.
对不起,如果这看起来很明显,我们都必须从某个地方开始

讨论结果:

下面是在Cygwin上使用libwertc audio processing devel成功编译的一个简单程序

$ cat main.cpp
#include "webrtc/modules/audio_processing/include/audio_processing.h"
int main() {
        webrtc::AudioProcessing* apm;
}
$ g++ main.cpp -o main -I/usr/include/webrtc_audio_processing/ -DWEBRTC_WIN -std=gnu++11 -L/bin/ -lcygwebrtc_audio_processing-1

查看包内容:

include指令可能只是

-I/usr/include/webrtc_audio_processing

尝试
-lwebrtc\u audio\u processing
@matzeri,但它也没有这样做。输出:
$g++main.cpp-o main-L/bin/-lwebtc\u audio\u processing-I/usr/include/webrtc\u audio\u processing/webrtc/modules/audio\u processing/include/In文件包含在main.cpp:1:0:/usr/include/webrtc\u audio\u processing/include/audio\u processing.h:22:35:致命错误:webrtc/base/arraysize.h:没有这样的文件或目录编译已终止。
这似乎是对的,我看到库的不同“副本”中的代码实例引用了从webrtc文件夹(位于webrtc\u audio\u处理中)开始的标题。我修改了我的simple main.cpp以适应这种变化,并编译了它。现在我们有了一些新的输出,请参见。输出的一部分是
/usr/include/webrtc_audio_processing/webrtc/base/platform_file.h:27:2:error:#error Unsupported platform#error Unsupported platform
,但如果没有在cygwin上编译,为什么它会作为一个包提供呢?这样使用头(
#include
)实际上是正确的。您可能还需要将
-DWEBRTC\u WIN
添加到您的构建标志中,以向正在为Windows构建的标题发送信号。这很有帮助!出现另一个错误:
/usr/include/webrtc\u audio\u processing/webrtc/base/maybe.h:34:7:警告:覆盖控件(覆盖/最终)只有-std=c++11或-std=gnu++11可用,这需要我添加-std=c++11。现在我有:
$g++main.cpp-o main-L/bin/-lcygwebrtc_audio_processing-1-I/usr/include/webrtc_audio_processing/-DWEBRTC_WIN-std=c++11
,以及以下内容。我不确定为什么这个m_PI变量没有被声明,我正在尝试解决它。看起来它应该很好,因为它在数学之前定义了。在cmath.h之前没有#define(定义#使用(数学)define(定义#定义#使用(数学)定义),但添加它不会改变任何事情。请尝试改用
-std=gnu++11