无法使用 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 问题。谢谢!
供参考:我目前正在使用 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 问题。谢谢!