【发布时间】:2011-07-11 15:39:22
【问题描述】:
我正在尝试编译此代码,但如果我确实使用:
gcc prt.c portaudio.h -o prt
但我收到此错误:
main.c:47: undefined reference to `Pa_OpenDefaultStream'
main.c:62: undefined reference to `Pa_StartStream'
main.c:65: undefined reference to `Pa_Sleep'
main.c:66: undefined reference to `Pa_StopStream'
main.c:69: undefined reference to `Pa_CloseStream'
main.c:72: undefined reference to `Pa_Terminate'
main.c:78: undefined reference to `Pa_Terminate'
我不知道为什么,但我可能是因为我没有规则(制作文件) 所以我做了一个:
main: main.o
gcc main.o -o main
main.o: main.c portaudio.h
gcc -c main.c
但是当我尝试通过 cygwin 运行它时:使用“Make” 我收到这条消息:
"make: *** No targets specified and no makefile found. Stop.
我不明白这个问题,请帮助我是我的 makefile 有问题还是有其他问题。
这也是代码: main.c
#include <stdio.h>
#include "portaudio.h"
#define SAMPLE_RATE (44100)
typedef struct
{
float left_phase;
float right_phase;
}
paTestData;
static int patestCallback( const void *inputBuffer, void *outputBuffer,
unsigned long framesPerBuffer,
const PaStreamCallbackTimeInfo* timeInfo,
PaStreamCallbackFlags statusFlags,
void *userData )
{
/* Cast data passed through stream to our structure. */
paTestData *data = (paTestData*)userData;
float *out = (float*)outputBuffer;
unsigned int i;
(void) inputBuffer; /* Prevent unused variable warning. */
for( i=0; i<framesPerBuffer; i++ )
{
*out++ = data->left_phase; /* left */
*out++ = data->right_phase; /* right */
/* Generate simple sawtooth phaser that ranges between -1.0 and 1.0. */
data->left_phase += 0.01f;
/* When signal reaches top, drop back down. */
if( data->left_phase >= 1.0f ) data->left_phase -= 2.0f;
/* higher pitch so we can distinguish left and right. */
data->right_phase += 0.03f;
if( data->right_phase >= 1.0f ) data->right_phase -= 2.0f;
}
return 0;
}
static paTestData data;
int main (void) {
PaStream *stream;
PaError err;
err = Pa_OpenDefaultStream( &stream,
0, /* no input channels */
2, /* stereo output */
paFloat32, /* 32 bit floating point output */
SAMPLE_RATE,
256, /* frames per buffer, i.e. the number
of sample frames that PortAudio will
request from the callback. Many apps
may want to use
paFramesPerBufferUnspecified, which
tells PortAudio to pick the best,
possibly changing, buffer size.*/
patestCallback, /* this is your callback function */
&data ); /*This is a pointer that will be passed to
your callback*/
err = Pa_StartStream( stream );
if( err != paNoError ) goto error;
Pa_Sleep(9*1000);
err = Pa_StopStream( stream );
if( err != paNoError ) goto error;
err = Pa_CloseStream( stream );
if( err != paNoError ) goto error;
err = Pa_Terminate( );
if( err != paNoError ) goto error;
printf("Test finished.\n");
return err;
error:
Pa_Terminate();
return err;
}
和头文件portaudio.h:Portaudio.h 如果你想要更清晰的 main.c 视图:main.c
我不太清楚为什么会出现这些消息/错误/警告,请帮忙。
这也是我的文件夹视图:
【问题讨论】:
-
符号 Pa_* 在哪里定义?是否有您应该链接的库?
-
是的,有一个名为 portaudio_x86.lib 的库,但我不知道如何在 make 文件中链接它或将它放在哪里。另外,如果你知道如何在 Visual C++ 2008 中做到这一点,那就太好了