|
源码编译安装C++的DSP框架kfr-4.2.0
https://github.com/kfrlib/kfr
Documentation home:
https://www.kfrlib.com/newdocs/
官方测试通过的:
(Intel AVX2) Ubuntu 18.04 / gcc-7.x / clang version 7.0.0 (tags/RELEASE_700/final)
Ubuntu 18.04下安装多版本clang并灵活切换
jiang@jiang-Ubuntu:~$ sudo apt install clang
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
clang 已经是最新版 (1:6.0-41~exp5~ubuntu1)。
查看版本号:
clang --version
clang++ --version
我的是:clang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final)
gcc --version
g++ --version
我的版本是:g++ (Ubuntu 8.4.0-1ubuntu1~18.04) 8.4.0
网上有人说:这个库最坑的是要使用clang7.0往上才能用,所以开始修改版本了:
sudo apt install clang-7 安装后:clang-7 已经是最新版 (1:7-3~ubuntu0.18.04.1)
Clang不同版本的切换:类似的http://www.ai111.vip/thread-1052-1-1.html
ls /usr/bin/clang*
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-7 30
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-6.0 60
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-7 30
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-6.0 60
sudo update-alternatives --config clang 键入选择的编号
sudo update-alternatives --config clang++ 键入选择的编号
再次查看版本号:
clang --version
clang++ --version
我的是:clang version 7.0.0-3~ubuntu0.18.04.1 (tags/RELEASE_700/final)
安装步骤:
mkdir build && cd build
cmake -DENABLE_TESTS=ON -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release ..
make -j8
测试一下:
cd <path_to_cmake_build_directory>
cd tests
ctest -V
安装到系统:
sudo make install
sudo ldconfig
运行官方的example报错:
/usr/bin/ld: 找不到 -lkfr
这样解决也不行:
include_directories("/usr/local/include/kfr/")
libkfr.a libkfr.so 根本没有 这是一个接口库
# KFR library interface library
# 这类库有属性,能install(),export和imported,但可能没有build过程
add_library(kfr INTERFACE)
//库的源文件可指定,也可用target_sources()后续指定
target_sources(kfr INTERFACE ${KFR_SRC})
target_include_directories(kfr INTERFACE include)
target_compile_options(kfr INTERFACE "$<$<CONFIGEBUG>:-DKFR_DEBUG>")
# 这里找不到 库: kfr use_arch
# /usr/bin/ld: 找不到 -lkfr
# /usr/bin/ld: 找不到 -luse_arch
这个又可以?
# target_include_directories(biquads INTERFACE "/usr/local/include/kfr/")
# target_link_libraries(biquads INTERFACE "/usr/local/include/kfr/")
解决:
# 接口库 类似一个 纯头文件库
# target_link_libraries(iir INTERFACE "/usr/local/include/kfr/")
- CMakeFiles/iir.dir/iir.cpp.o:在函数‘kfr::sse2::vec<double, 1ul> kfr::sse2::intrinsics::exp<1ul>(kfr::sse2::vec<double, 1ul> const&)’中:
- iir.cpp:(.text._ZN3kfr4sse210intrinsics3expILm1EEENS0_3vecIdXT_EEERKS4_[_ZN3kfr4sse210intrinsics3expILm1EEENS0_3vecIdXT_EEERKS4_]+0x40):对‘kfr::scalar_constants<double>::recip_log_2’未定义的引用
- iir.cpp:(.text._ZN3kfr4sse210intrinsics3expILm1EEENS0_3vecIdXT_EEERKS4_[_ZN3kfr4sse210intrinsics3expILm1EEENS0_3vecIdXT_EEERKS4_]+0x3bd):对‘kfr::scalar_constants<double>::neginfinity’未定义的引用
- CMakeFiles/iir.dir/iir.cpp.o:在函数‘kfr::sse2::vec<double, 1ul> kfr::sse2::intrinsics::log<1ul>(kfr::sse2::vec<double, 1ul> const&)’中:
- iir.cpp:(.text._ZN3kfr4sse210intrinsics3logILm1EEENS0_3vecIdXT_EEERKS4_[_ZN3kfr4sse210intrinsics3logILm1EEENS0_3vecIdXT_EEERKS4_]+0x103):对‘kfr::scalar_constants<double>::qnan’未定义的引用
- iir.cpp:(.text._ZN3kfr4sse210intrinsics3logILm1EEENS0_3vecIdXT_EEERKS4_[_ZN3kfr4sse210intrinsics3logILm1EEENS0_3vecIdXT_EEERKS4_]+0x10d):对‘kfr::scalar_constants<double>::neginfinity’未定义的引用
- iir.cpp:(.text._ZN3kfr4sse210intrinsics3logILm1EEENS0_3vecIdXT_EEERKS4_[_ZN3kfr4sse210intrinsics3logILm1EEENS0_3vecIdXT_EEERKS4_]+0x2d4):对‘kfr::scalar_constants<double>::log_2’未定义的引用
复制代码
解决:cmake ..KFR 从 4.0 版开始需要 C++17 标准 SET(CMAKE_CXX_STANDARD 17)
|
|