Не в состоянии скомпилировать исходный код с JACK API
Для справки: я сейчас нахожусь на Manjaro (Arch Linux) и использую компилятор GNU g++. Я хочу создать программу для JACK (Jack Audio Connection Kit) и сейчас пытаюсь использовать их API, представленный здесь. Я установил Jack2, но также попробовал его с Jack2-dbus. Я нашел что-то в AUR под названием jackcpp, но это тоже не помогло.
Чтобы добраться до моей проблемы: я не могу скомпилировать их примеры клиентов, перечисленных, и, очевидно, я не могу построить свой собственный, используя этот 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;
};
}
на основе функции, задокументированной здесь. Попробуйте запустить сервер jack и вернуть bool, если операция прошла успешно или нет. Если я попытаюсь скомпилировать это (с помощью 'pkg-config', как я должен):
$ 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-документов обратно в функцию, но это никуда меня не привело ни... (undefined ссылка...) Я чувствую, что мне не хватает чего-то очень простого, или что-то действительно сломано с этим API. Я был на этом почти неделю, и я просто не могу понять это.
1 ответ
Если кто-то наткнется на это и спросит, что случилось: я разместил это на форуме JackAudio здесь. Любой может прочитать его, если захочет, но я отмечу этот вопрос как ответивший сейчас, так как это действительно не проблема C++ или компиляции, а проблема Джека. Спасибо!