Home > OS >  Linking portaudio into a C program on Linux
Linking portaudio into a C program on Linux

Time:03-02

Problem with linking portaudio into an c program on Linux. System: Linux Ubuntu 20.4 i5 16 GB ALSA and pulseaudio were preinstralled. gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0

gcc -Wall wm_1.c -lm libportaudio.a -o wm_1
The linker gives me more than 100 error messages all of type "undefined reference"
Here 2 examples out of >100 /home/max/Desktop/dev/portaudio/src/hostapi/alsa/pa_linux_alsa.c:504: undefined reference to snd_pcm_status_get_delay' /home/max/Desktop/dev/portaudio/src/hostapi/oss/pa_unix_oss.c:1778: undefined reference to __pthread_unregister_cancel' So its obvious that the named parameter/function can not be found.

The error messages all point to source files in the source directory (the directory of the portaudio package I downloaded to creatie the libs which were all created without error. The libs are in /usr/local/.. libportaudio.a libportaudio.la libportaudio.so libportaudio.so.2 libportaudio.so.2.0.0 pkgconfig python3.8 and I copied libportaudio.a into the project directory. The lib has a a size of 1.1 MB .

if I use the dynamic libportaudio.so I get the error messages at run time.

I suspect that something went totally wrong with creating the libraries but I have no idea how to solve that Other option: Linking parameter or files missing ? Header file ?

The same program compiles, links and runs without any problem on a iMac OS 10.13.6 where I used the dynamic lib .dylib. gcc -v wm_1.c libportaudio.dylib -o wm_1

CodePudding user response:

From the documentation:

Note that you will usually need to link with the approriate libraries that you used, such as ALSA and JACK, as well as with librt and libpthread. For example:

gcc main.c libportaudio.a -lrt -lm -lasound -ljack -pthread -o YOUR_BINARY

A little googling goes a long way...

CodePudding user response:

This works: gcc -Wall wm_1.c -lm libportaudio.a -lasound -pthread -o test.

gcc main.c libportaudio.a -lrt -lm -lasound -ljack -pthread -o YOUR_BINARY I used that page and the command line at the begin using all 3 parameter but got errors, probably of misspelling, so I gave up on that (also because on the Mac OS it was not necessary). It now links without errors using -lasound and -pthread only (-pthread alone gives still errors and the use/not use of -ljack makes no difference).
I get some errors when I run the program but probably because of missing or wrong ALSA parameter settings. I found -pthread but I could not find -ljack and -lasound.

So the question: what are this 2 parameter doing? It must be link parameter, but where is the documentation, I searched ld and gcc and did not find anything, while -pthread is documented.

  • Related