【问题标题】:Fail to compile source with JACK API使用 JACK API 编译源失败
【发布时间】:2018-01-19 08:33:39
【问题描述】:

供参考:我目前在 Manjaro (Arch Linux) 上并且正在使用 GNU g++ 编译器。我想为JACK(杰克音频连接套件)创建一个程序,现在我正在尝试使用他们提供的here API。我安装了 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。如果操作成功与否,尝试启动一个千斤顶服务器并返回一个布尔值。 如果我尝试编译它(使用 '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。我不知道他们的文档是否已过时,或者我是否缺少文件/有错误的文件... 然后我尝试只用一个论点来做到这一点

...    
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 Docs 中的“驱动程序”部分重新包含到函数中,但这也没有让我得到任何结果.. .(未定义的参考...)我觉得我错过了一些非常简单的东西,或者该API确实破坏了一些东西。我已经研究了差不多一个星期了,我就是想不通。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 2019-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多