未定义对“jack_client_close”等的引用

Posted

技术标签:

【中文标题】未定义对“jack_client_close”等的引用【英文标题】:undefined reference to `jack_client_close`, et al 【发布时间】:2013-02-17 10:11:12 【问题描述】:

我正在尝试关注 this 关于 jack 的介绍性教程(适用于 linux 的音频服务器)。在教程中,作者解释说你应该使用pkg-config来找到jack的cflagslibs,使gcc命令如下:

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

给出输出:

/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

我在使用 gcc 或编写 c 程序方面不是很有经验(我的大部分经验是使用 javascript、clojure、java、python 和 php)。我从这个和我的研究中收集到的是一些库丢失或链接不正确(不确定是哪个)。

所以只要在我的机器上运行pkg-config --cflags --libs jack,我就会得到:

-ljack

在上面引用的教程中,作者演示了为杰克收集要链接的库的相同方法,但他的输出如下所示:

-ljack -lpthread -ldl -lrt

不确定pthread是什么,但我认为dl是dsp-loader,而rt与实时有关。我在几个名为/lib 的目录中进行了搜索,但没有发现任何其他库,所以我认为它们不存在于我的机器上。但是,我觉得很奇怪,打电话给pkg-config 并没有提到他们。我应该如何去寻找这些库?还是我走错了路?

【问题讨论】:

这个命令有效吗:gcc -o simple_client $(pkg-config --cflags --libs jack) -ljack -lpthread -ldl -lrt simple_client.c ? 您介意在运行上述 gcc 命令时使用遇到的错误来编辑帖子吗?这将是调试问题所在的有用信息。 输出相同 ls -l /usr/lib/libjack.so* 的输出是什么,或者如果您的系统有 /usr/lib64 并且您正在运行 64 位 ls -l /usr/lib64/libjack.so* 我似乎没有这些选项。我有 /lib64 本身,它不包含 libjack.so*,我有 /usr/lib/ 但没有 libjack 任何东西,我有 /usr/lib32 并且再次没有 libjack 任何东西 【参考方案1】:

你的链接命令行错误,试试这个吧:

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

命令行matters存档库的顺序。

【讨论】:

以上是关于未定义对“jack_client_close”等的引用的主要内容,如果未能解决你的问题,请参考以下文章

ejs '部分未定义'

Javascript TypeError 代码出错,变量未定义

替换未调用 onAttach、onCreate、onCreateView 等的活动中的片段

软考知识点梳理--项目镀金和范围蔓延

冻结(挂起)会发生在不使用互斥锁、信号量等的线程不安全代码中吗?

边框、渐变等的 LWUIT 主题资源语法是啥?