Portaudio示例" record_file.c"找不到" min"

时间:2015-02-22 16:16:07

标签: c++ c portaudio

首先,我发现了较小的示例paex_record.c

我在Windows8上使用MinGW,并且从源代码编译了portaudio,我从中获得了使用过的libportaudio-2.dll

我在QtCreator(没有gui)中设置了一个带有以下.pro文件的项目:

TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += main.cpp

LIBS += -LC:/Audio/patest/paex_record_file -llibportaudio-2

我的文件夹C:/Audio/patest/paex_record_file如下:

libportaudio-2.dll
main.cpp
pa_ringbuffer.c
pa_ringbuffer.h
pa_util.h
paex_record_file.pro
paex_record_file.pro.user
portaudio.h

我找不到pa_ringbufferpa_util这个文件夹。 Main.cpp包含来自portaudio源的整个示例文件paex_record_file.c

调用ringbuffer时出错(第246行和第271行:source): "min" was not declared in this scope

我认为这个示例会像record.c示例一样直接运行。

我是否需要包含更多包裹?我已尝试algorithmmathstdusing namespace std,但仍会发生错误。但我觉得它应该在盒子外工作,也许我的包含文件或文件夹设置/链接不正常?

编辑:好的,我只是自己定义了一个min-function。现在它抛出了不同的错误: undefined reference to "PaUtil_GetRingBufferReadAvailable" 还有一些这样的。可能有一个lib缺失了,看看......

1 个答案:

答案 0 :(得分:1)

我尝试编译IEnumerable<T>时也遇到此链接错误。事实证明,在编译主文件之前需要编译IQueryable<T>。还有一些外部依赖于某些alloc函数,因此您需要在文件中更改2行。

我不精通qt,但你需要做类似的事情:

var app = angular.module('plunker', []); app.controller('MainCtrl', function($scope) { $scope.books = [ { title: 'Sample Title' }, { title: 'Sample Title 2' }, { title: 'Sample Title 3' }, { title: 'Sample Title 4' } ]; $scope.markFavorite = function(book) { book.isFavorite = true; }; $scope.unmarkFavorite = function(book) { book.isFavorite = false; }; });

以下是我使用MinGW编译的方法:

paex_record_file.c内的更改

  <body ng-controller="MainCtrl">

    <p>All books</p>    
    <ul>
      <li ng-repeat="book in books"><button ng-click="markFavorite(book)">{{book.title}}</button></li>
    </ul>

    <p>Favorite books</p>    
    <ul>
      <li ng-repeat="book in books | filter:{isFavorite:true}"><button ng-click="unmarkFavorite(book)">{{book.title}}</button></li>
    </ul>

  </body>

使用MinGW编译:

paex_record_file.c

我没有得到min问题,但也许你可以尝试删除pa_ringbuffer.c后卫并尝试重新编译。

SOURCES += pa_ringbuffer.c main.cpp

Line 313 : data.ringBufferData = (SAMPLE *) malloc( numBytes );
Line 443 : free( data.ringBufferData );