使用 qmake 与 jack 链接
Linking with jack using qmake
我在同一台机器上有两个相似的项目。它们的区别在于一个使用 GUI(Qt 和 Qwt)而另一个不使用。结果,有Qt的一个用qmake编译,一个用cmake编译。
该项目本身是关于信号处理和处理音频的。我决定使用 RtAudio 来捕获音频信号。当我用 cmake 编译时,我可以编译并且 运行 示例代码很好,但是当我尝试使用 qmake 编译另一个项目时,它失败了。
问题是jack
(音频库)在使用qmake编译时找不到。但首先,让我们从有效的项目开始。这是我的 CMakeLists.txt
文件中的内容:
cmake_minimum_required(VERSION 3.18)
project(cli_test)
set(CMAKE_CXX_STANDARD 17)
add_executable(cli_test main.cpp)
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
target_link_libraries(arecord PRIVATE Threads::Threads)
target_link_libraries(arecord PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/fftw/lib/libfftw3.a)
include_directories(./rtaudio/include/rtaudio)
#list(GET LIB_TARGETS 0 LIBRTAUDIO)
set(LINKLIBS)
list(APPEND LINKLIBS ${ALSA_LIBRARY})
list(APPEND INCDIRS ${ALSA_INCLUDE_DIR})
target_link_libraries(cli_test ${CMAKE_CURRENT_SOURCE_DIR}/rtaudio/lib/librtaudio.a ${LINKLIBS})
target_link_libraries(cli_test PRIVATE Threads::Threads)
target_link_libraries(cli_test PRIVATE jack)
target_link_libraries(cli_test PRIVATE /usr/lib/libasound.so)
target_link_libraries(cli_test PRIVATE /usr/lib/libpulse.so)
target_link_libraries(cli_test PRIVATE /usr/lib/libpulse-simple.so)
(同样,效果很好)。然后我得到了这个 qwt_test.pro
:
CONFIG += c++1z c++14
INCLUDEPATH += .
INCLUDEPATH += $${PWD}/rtaudio/include/rtaudio
LIBS += $${PWD}/fftw/lib/libfftw3.a
LIBS += $${PWD}/rtaudio/lib/librtaudio.a
LIBS += jack
LIBS += /usr/lib/libasound.so
LIBS += /usr/lib/libpulse.so
LIBS += /usr/lib/libpulse-simple.so
TARGET = qwt_test
SOURCES = \
main.cpp
我得到的错误是:
linking ../bin/qwt_test
/usr/bin/ld: cannot find jack: No such file or directory
collect2: error: ld returned 1 exit status
我的问题是,我如何 link 我的项目使用 qmake 和 jack?
要让 qmake 知道在哪里可以找到库,请添加
LIBS += -L"where-you-have-jack-lib" -ljack
我在同一台机器上有两个相似的项目。它们的区别在于一个使用 GUI(Qt 和 Qwt)而另一个不使用。结果,有Qt的一个用qmake编译,一个用cmake编译。
该项目本身是关于信号处理和处理音频的。我决定使用 RtAudio 来捕获音频信号。当我用 cmake 编译时,我可以编译并且 运行 示例代码很好,但是当我尝试使用 qmake 编译另一个项目时,它失败了。
问题是jack
(音频库)在使用qmake编译时找不到。但首先,让我们从有效的项目开始。这是我的 CMakeLists.txt
文件中的内容:
cmake_minimum_required(VERSION 3.18)
project(cli_test)
set(CMAKE_CXX_STANDARD 17)
add_executable(cli_test main.cpp)
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
target_link_libraries(arecord PRIVATE Threads::Threads)
target_link_libraries(arecord PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/fftw/lib/libfftw3.a)
include_directories(./rtaudio/include/rtaudio)
#list(GET LIB_TARGETS 0 LIBRTAUDIO)
set(LINKLIBS)
list(APPEND LINKLIBS ${ALSA_LIBRARY})
list(APPEND INCDIRS ${ALSA_INCLUDE_DIR})
target_link_libraries(cli_test ${CMAKE_CURRENT_SOURCE_DIR}/rtaudio/lib/librtaudio.a ${LINKLIBS})
target_link_libraries(cli_test PRIVATE Threads::Threads)
target_link_libraries(cli_test PRIVATE jack)
target_link_libraries(cli_test PRIVATE /usr/lib/libasound.so)
target_link_libraries(cli_test PRIVATE /usr/lib/libpulse.so)
target_link_libraries(cli_test PRIVATE /usr/lib/libpulse-simple.so)
(同样,效果很好)。然后我得到了这个 qwt_test.pro
:
CONFIG += c++1z c++14
INCLUDEPATH += .
INCLUDEPATH += $${PWD}/rtaudio/include/rtaudio
LIBS += $${PWD}/fftw/lib/libfftw3.a
LIBS += $${PWD}/rtaudio/lib/librtaudio.a
LIBS += jack
LIBS += /usr/lib/libasound.so
LIBS += /usr/lib/libpulse.so
LIBS += /usr/lib/libpulse-simple.so
TARGET = qwt_test
SOURCES = \
main.cpp
我得到的错误是:
linking ../bin/qwt_test
/usr/bin/ld: cannot find jack: No such file or directory
collect2: error: ld returned 1 exit status
我的问题是,我如何 link 我的项目使用 qmake 和 jack?
要让 qmake 知道在哪里可以找到库,请添加
LIBS += -L"where-you-have-jack-lib" -ljack