I'm trying to follow this introductory tutorial on jack (audio server for linux). In the tutorial, the author explains that you should use pkg-config to find the cflags and libs for jack, making the gcc command like this:

gcc -o simple_client `pkg-config --cflags --libs jack` simple_client.c

which gives the output:

/tmp/ccyuOC0u.o: In function `signal_handler':
simple_client.c:(.text+0x16): undefined reference to `jack_client_close'
/tmp/ccyuOC0u.o: In function `process':
simple_client.c:(.text+0x6f): undefined reference to `jack_port_get_buffer'
simple_client.c:(.text+0x87): undefined reference to `jack_port_get_buffer'
/tmp/ccyuOC0u.o: In function `main':
simple_client.c:(.text+0x25b): undefined reference to `sin'
simple_client.c:(.text+0x2c1): undefined reference to `jack_client_open'
simple_client.c:(.text+0x372): undefined reference to `jack_get_client_name'
simple_client.c:(.text+0x3b1): undefined reference to `jack_set_process_callback'
simple_client.c:(.text+0x3ca): undefined reference to `jack_on_shutdown'
simple_client.c:(.text+0x3ee): undefined reference to `jack_port_register'
simple_client.c:(.text+0x419): undefined reference to `jack_port_register'
simple_client.c:(.text+0x475): undefined reference to `jack_activate'
simple_client.c:(.text+0x4c5): undefined reference to `jack_get_ports'
simple_client.c:(.text+0x514): undefined reference to `jack_port_name'
simple_client.c:(.text+0x52c): undefined reference to `jack_connect'
simple_client.c:(.text+0x56e): undefined reference to `jack_port_name'
simple_client.c:(.text+0x586): undefined reference to `jack_connect'
simple_client.c:(.text+0x5ba): undefined reference to `jack_free'
collect2: ld returned 1 exit status

I'm not very experienced using gcc or writing c programs generally (most of my experience has been with javascript, clojure, java, python, and php). What I gather from this and my research into it is that some libraries are missing or linked incorrectly (not sure which).

So just running pkg-config --cflags --libs jack on my machine, I get:

-ljack

In the tutorial referenced above, the author demonstrates the same method for gleaning the libs to be linked for jack, but his output looks like this:

-ljack -lpthread -ldl -lrt

Not sure what pthread is, but I think dl is dsp-loader, and rt has something to do with realtime. I've searched in several directories called /lib and haven't come across anything for these other libs, so I don't think they exist on my machine. However, it seems strange to me that calling pkg-config doesn't make any mention of them. How should I go about finding these libs? Or am I on the wrong track?

有帮助吗?

解决方案

Your link command line is wrong, try this one instead:

gcc -o simple_client simple_client.c `pkg-config --cflags --libs jack`

The order of archive libraries on command line matters.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top