"неопределенная ссылка на" ошибки при компиляции в qt - PullRequest
0 голосов
/ 28 апреля 2018

Я попытался скомпилировать пример из: http://equalarea.com/paul/alsa-audio.html#forget. Я немного изменил его, чтобы не использовать аргументы. Была также ошибка преобразования типа, которую я исправил.

У меня остался этот код:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include </usr/include/alsa/asoundlib.h>
#include </usr/include/alsa/pcm.h>

using namespace std;

int main()
{
        int i;
        int err;
        short buf[128];
        snd_pcm_t *capture_handle;
        snd_pcm_hw_params_t *hw_params;

        const char dev[] = "test";
        if ((err = snd_pcm_open (&capture_handle, dev, SND_PCM_STREAM_CAPTURE, 0)) < 0) {
            fprintf (stderr, "cannot open audio device %s (%s)\n",
                 dev,
                 snd_strerror (err));
            exit (1);
        }

        if ((err = snd_pcm_hw_params_malloc (&hw_params)) < 0) {
            fprintf (stderr, "cannot allocate hardware parameter structure (%s)\n",
                 snd_strerror (err));
            exit (1);
        }

        if ((err = snd_pcm_hw_params_any (capture_handle, hw_params)) < 0) {
            fprintf (stderr, "cannot initialize hardware parameter structure (%s)\n",
                 snd_strerror (err));
            exit (1);
        }

        if ((err = snd_pcm_hw_params_set_access (capture_handle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED)) < 0) {
            fprintf (stderr, "cannot set access type (%s)\n",
                 snd_strerror (err));
            exit (1);
        }

        if ((err = snd_pcm_hw_params_set_format (capture_handle, hw_params, SND_PCM_FORMAT_S16_LE)) < 0) {
            fprintf (stderr, "cannot set sample format (%s)\n",
                 snd_strerror (err));
            exit (1);
        }

        if ((err = snd_pcm_hw_params_set_rate_near (capture_handle, hw_params, (unsigned int*)44100, 0)) < 0) {
            fprintf (stderr, "cannot set sample rate (%s)\n",
                 snd_strerror (err));
            exit (1);
        }

        if ((err = snd_pcm_hw_params_set_channels (capture_handle, hw_params, 2)) < 0) {
            fprintf (stderr, "cannot set channel count (%s)\n",
                 snd_strerror (err));
            exit (1);
        }

        if ((err = snd_pcm_hw_params (capture_handle, hw_params)) < 0) {
            fprintf (stderr, "cannot set parameters (%s)\n",
                 snd_strerror (err));
            exit (1);
        }

        snd_pcm_hw_params_free (hw_params);

        if ((err = snd_pcm_prepare (capture_handle)) < 0) {
            fprintf (stderr, "cannot prepare audio interface for use (%s)\n",
                 snd_strerror (err));
            exit (1);
        }

        for (i = 0; i < 10; ++i) {
            if ((err = snd_pcm_readi (capture_handle, buf, 128)) != 128) {
                fprintf (stderr, "read from audio interface failed (%s)\n",
                     snd_strerror (err));
                exit (1);
            }
        }

        snd_pcm_close (capture_handle);
        exit (0);
}

При компиляции с: gcc main.cpp -o alsatest -lasound -lstdc++ он работает как шарм, но при компиляции с qt я получаю:

errors

Я бы даже не попробовал это, но я хочу, чтобы он работал в qt, чтобы я мог создавать кроссплатформенное приложение (после добавления поддержки WASAPI).

EDIT:

найденное решение: добавить LIBS + = -lasound в .pro файл

1 Ответ

0 голосов
/ 28 апреля 2018

-lasound говорит компоновщику включить библиотеку asound, чтобы вызовы функций snd _ * () разрешались. Возможно, вы не указали asound в QT IDE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...