【发布时间】: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