无法使用 JACK API 编译源代码

Fail to compile source with JACK API

供参考:我目前正在使用 Manjaro (Arch Linux) 并使用 GNU g++ 编译器。我想为 JACK (Jack Audio Connection Kit) and am now trying to use their API provided here 创建一个程序。我安装了 Jack2,但也尝试过使用 Jack2-dbus。我在 AUR 中找到了一个名为 jackcpp 的东西,但这对两者都没有帮助。

解决我的问题:我无法编译他们列出的 example clients,显然我无法使用 API 构建我自己的。我怀疑它坏了,但我无法想象没有人报告它所以我现在真的不知道该怎么办。

在我的jacktest.cpp中是这样写的:

#include <iostream>
#include "jack/control.h"

int main(){
    jackctl_server_t *server;
    jackctl_driver_t *driver;

    if (jackctl_server_start(server, driver)) {
        std::cout << "Started!";
        return 0;
    }else{
        std::cout <<"Failed!";
        return 1;
    };
}

基于记录的函数 here。尝试启动一个 jack 服务器和 return 一个布尔值,如果操作成功与否。 如果我尝试编译它(使用 'pkg-config' 作为 supposed 到):

$ g++ -o jacktest `pkg-config --cflags --libs jack` jacktest.cpp

它抛出:

jacktest.cpp:8:44: error: too many arguments to function 'bool jackctl_server_start(jackctl_server_t*)'
     if (jackctl_server_start(server, driver))

所以我检查了一下,确实,在我的 /usr/include/jack/control.h 中,它只用一个参数定义了 jackctl_server_start。我不知道他们的文档是否过时或者我是否遗漏了 files/have 错误的文档... 然后我试着只用一个参数

...    
if (jackctl_server_start(server)) {
...

然后抛出:

/usr/bin/ld: /tmp/ccxm3fWC.o: undefined reference to symbol '_ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4'
/usr/lib/libstdc++.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

我试图重新排列参数:

$ g++ -o jacktest `pkg-config --cflags --libs jack` jacktest.cpp
$ g++ -o jacktest jacktest.cpp `pkg-config --cflags --libs jack`
$ g++ jacktest.cpp `pkg-config --cflags --libs jack` -o jacktest
$ g++  jacktest.cpp -o jacktest `pkg-config --cflags --libs jack`

总是抛出同样的错误...

现在真正让我觉得有些东西坏了:另一个 jacktest_2.cpp 现在包括 jack.h 并排除 control.h

#include <iostream>
#include "jack/jack.h"

int main(){
    jack_client_t *client;

    if (client = jack_client_new("test_client")) {
        std::cout << "Running!";
        return 0;
    }else{
        std::cout <<"Not Running!";
        return 1;
    };
}

我可以编译:

$ g++ -o jacktest_2 jacktest_2.cpp `pkg-config --cflags --libs jack`

虽然它让我抱怨这个功能被贬低了,但这个程序也做了它应该做的!所以至少其中一些是有效的?!

还有:

$ g++ -print-file-name=jack 
/usr/lib/gcc/x86_64-pc-linux-gnu/7.2.1/../../../../lib/jack

这正常吗? usr/lib/gcc/x86_64-pc-linux-gnu/7.2.1

中没有lib/jack

总而言之:我真的需要 control.h,我什至更改了 control.h 并将 API 文档中的 'driver' 部分重新包含到函数中,但这并没有让我任何地方......(未定义的参考......)我觉得我错过了一些非常简单的东西,或者确实有一些东西被那个 API 破坏了。我已经研究了将近一个星期了,我就是想不通。

如果有人偶然发现并想知道发生了什么:我在 JackAudio 论坛上发布了这个 here。如果 he/she 愿意,任何人都可以阅读它,但我现在将这个问题标记为已回答,因为它实际上不是 C++ 或编译问题,而是 Jack 问题。谢谢!