Как включить libsdn и portaudio в проект C?

Проект

«Проект», над которым я сейчас работаю, — это проигрыватель Tui WAV. Я на первом этапе, когда хочу прочитать и воспроизвести песню/звук в формате wav.

Имейте в виду, что я начал использовать C 4 недели назад, так что я новичок.

Я не использую никакую IDE и cc для компиляции (cc main.c -o main -lm)

Что я сделал

Я скачал portaudio через yay/pacman, скачал исходный код libsnd из здесь, установил с помощью документации (./configure && make && make install).

Исходники libsnd находятся в той же папке, что и мой код main.c.

Вывод ls -a

 .    c-econio  'Goran Bregović - Kalashnikov.mp3'   kalasnikow.wav      main.c       test.c
 ..   .git      'Goran Bregović - Kalashnikov.wav'   libsndfile-1.0.28   random.mp3

c-econio и libsndfile-1.0.28 — это каталоги (библиотеки), которые я хочу использовать (econio будет использоваться позже). Как упоминалось ранее, portaudio устанавливается через менеджер пакетов.

Я понятия не имею, работает ли #inlude <portauido>, потому что не знаю, как проверить его без libsnd.

Главный вопрос

Как включить portaudio и libsnd в этот код и как его протестировать? Нужно ли мне что-то добавлять в компилятор (cc)? Я использую Linux.

Код

main.c

#include <dirent.h>
#include <stdio.h>
#include <string.h>
#include <portaudio.h>

int listwav() {
    int i = 1;
     DIR *d;
    struct dirent *entry;
    d = opendir("."); // Megnyitom az éppenleges DIR-t.
    if (d) {
        while ((entry = readdir(d)) != NULL) {  // Ameddig van file + mp3 kiiratás. 
            if (strlen(entry->d_name) > 4 && strcmp(entry->d_name + strlen(entry->d_name) - 4, ".wav") == 0) {
              printf("\t%d %s\n",i, entry->d_name);
              i++; 
            }
        }
        closedir(d);
    }
    return (0);
}

void play(){ // play audio "ffplay -v 0 -nodisp -autoexit"
  printf("What to play? \n");
  listwav();
  // system("playerctl play");
}

void stop(){
  printf("Stopped\n");
  // system("playerctl stop");
}

int chose(){
  int chosen = 0;    
  
  printf("Choose what to do:\n 1.Play\n 2.Stop\n 3.Exit\n Chosen: "); scanf("%d", &chosen);
  while (chosen != 3){
    switch (chosen) {
      case 1: play(); break;
      case 2: stop(); break;
    }
    return 0;
  }
}

 /// -----
 int main(){
   chose();

 }

Обновлено: Необновленная версия папки, которую я использую: https://github.com/Lolis4TheWin/mpc3

Похоже, вам просто нужно связать библиотеки с вашим исполняемым файлом. Можете ли вы включить свой make-файл в свой вопрос?

Chris 09.10.2023 09:50

Создать файл? Вы имеете в виду файл make libsnd или мой код? Потому что я не знаю, как создать файл make, и у меня его нет.

GooDinosaur 09.10.2023 09:58

Как вы компилируете и связываете свой код?

Chris 09.10.2023 10:01

«Я не использую никакую IDE и cc для компиляции (cc main.c -o main -lm)» Первый раздел.

GooDinosaur 09.10.2023 10:01

Если вы собираете и устанавливаете библиотеку, вам не нужно помещать ее в собственную папку с исходными кодами. Это только загромождает папку. Держите вещи отдельно. После того, как вы сделали make install из этой библиотеки, сгенерированная библиотека должна находиться в папке вашей библиотеки, и вам не нужно хранить исходные коды в своем собственном проекте.

Gerhardh 09.10.2023 10:08

А потом я просто добавляю #include <>?

GooDinosaur 09.10.2023 10:11

Да, это должно быть возможно. После успешного выполнения make install заголовки и библиотеки можно будет использовать, как показано в документации библиотеки.

Gerhardh 09.10.2023 13:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, я наконец понял!

Скачайте и создайте библиотеку

  1. Скачать исходный код
  2. Прочтите руководство по установке внутри исходного файла.
  3. Делай то, что он говорит (./configure; make ; make install)
  4. Вы можете удалить исходник, библиотека находится в вашем /usr/local/lib каталоге.

Скомпилируйте код

А) вариант

gcc -lsndfile main.c -o main -lm && ./main — это то, что мне пришлось использовать при компиляции.

После -l идет название библиотеки. -o обозначает выходной файл, а -lm обозначает некоторую библиотеку, которую мне пришлось включить из-за Linux. (Думаю, не основанная информация.)

И мне пришлось включить такие библиотеки:

#include <sndfile>
#include <portaudio>

Б) вариант

Связать библиотеку с путем внутри ""

#include "usr/local/lib/libsndfila.a"

Другие вопросы по теме