无法使用JACK API编译源代码

时间:2018-01-19 08:33:39

标签: c++ compiler-errors compilation g++ pkg-config

供参考:我目前正在Manjaro(Arch Linux)上使用GNU g ++编译器。我想为JACK(Jack Audio Connection Kit)创建一个程序,现在我正在尝试使用他们提供的here API。我安装了Jack2,但也尝试使用Jack2-dbus。我在AUR中发现了一些名为jackcpp的东西,但这对它们都没有帮助。

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

在我的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;
    };
}

基于记录的supposed函数。如果操作成功与否,尝试启动插孔服务器并返回bool。 如果我尝试编译它(使用&#39; pkg-config&#39;因为我Customize UI-Grid with Dynamic Cell Classes):

$ 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。我不知道他们的文档是否过时,或者我是否丢失文件/有错误的文件...... 然后我尝试用一​​个参数

来做
...    
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并包含他们的&#39;驱动程序&#39;部分从API Docs回到函数中,但这并没有让我到处都是...(未定义的引用...)我觉得我错过了一些非常简单的东西,或者那些API真的被打破了。我已经待了将近一个星期了,我无法弄明白。

1 个答案:

答案 0 :(得分:0)

如果有人发现这件事并想知道发生了什么:我在JackAudio论坛here中发布了这个。任何人都可以阅读它,如果他/她想,但我会将这个问题标记为现在已经回答,因为它确实不是C ++或编译问题,而是杰克问题。谢谢!