IT++是一个受欢迎的GPL库(proposed to be LGPL,但现在没有迹象表明)用于科学计算,特别是在电信领域。这是我的同事向我推荐的。
在我的Linux / Windows系统上安装这个库看起来很难。而installation guide似乎很难。
除了花时间在这个装置上,我还有很多其他工作要做。任何人都可以通过一些快速安装来节省一些时间,如果可能的话,还有一些你好,世界!类型的说明吗?
答案 0 :(得分:2)
$ wget https://sourceforge.net/projects/itpp/files/latest -O itpp.tar.bz2
$ tar -xjvf itpp.tar.bz2 && cd itpp-*
$ sudo apt-get install liblapack-dev libblas-dev libfftw3-dev
# Note: This is basic and recommended. MKL/ATLAS etc are
# platform-specialized, can give slightly better perf.
$ mkdir build1 build2
$ cd build1 # DYNAMIC (*.so file)
$ cmake ..
$ make
$ make install
$ cd bulid2 # STATIC (*.a file)
$ cmake .. -DITPP_SHARED_LIB=off
$ make
$ make install
# Note: The library installation is complete and is ready for both
# static and dynamic compilations. But the subsequent run of a
# *static compilation* is relatively more difficult, see details below.
不幸的是,即使installation instructions看起来足够完整,但对于初学者来说这是非常痛苦的,因为我在自己的同事中找到了。我认为这是因为它不适合初学者。我真诚地希望这篇文章能够缩小差距。
我认为安装中混淆的主要原因是BLAS,LAPACK和FFTW的依赖性,在可选,特定于供应商的BLAS / LAPACK版本的旁边提到/ FFTW,如MKL,ATLAS,ACML库,增加了实际要做的事情的混乱。
事实是,大多数令人困惑的比特都是可选的!
我建议先尝试下面的快速说明,然后忽略其他所有内容。
下载IT ++档案文件
$ wget https://sourceforge.net/projects/itpp/files/latest -O itpp.tar.bz2
提取并更改目录
$ tar -xjvf itpp.tar.bz2 && cd itpp-*
创建新的子目录" build1"和" build2" (我们将在后续步骤cd
向他们发送消息
$ mkdir build1 build2
确保您拥有LAPACK,BLAS,FFTW库。这不应该影响btw的后期阶段
$ sudo apt-get install liblapack-dev libblas-dev libfftw3-dev
这里有一个重要的警告:更多高效选项通常被认为是使用处理器的特定于供应商的库,例如Intel's MKL,AMD's ACML, ATLAS。但这种效率需要付出代价 - 你需要花费大量时间来注册(用于MKL),下载,安装,最后调整链接器开关,以便在每次编译和运行时都包含它们。
主要安装步骤:
请执行以下两个步骤。没有任何伤害,而且我个人认为IT ++应该安装两者作为默认选项。仅仅因为,您永远不知道将来何时需要静态编译。这就是几乎所有其他库在您的电脑上安装这两个版本的原因。
一个。 作为共享库 (* .so文件)
$ cd build1
$ cmake ..
$ make
$ make install
B中。 作为静态库 (* .a文件)
$ cd bulid2
$ cmake .. -DITPP_SHARED_LIB=off
$ make
$ make install
在cmake期间,您可能会遇到以下错误,但在成功运行单个IT ++程序之前,它们从未影响过后续阶段。所以请忽略它们。将来,以后的版本可能会将它们声明/更正为错误。当前版本是4.3.1。
CMake Warning at CMakeLists.txt:192 (message):
BLAS library not found.
CMake Warning at CMakeLists.txt:196 (message):
LAPACK library not found.
CMake Warning at CMakeLists.txt:200 (message):
FFT library not found.
考虑以下示例程序testITPP.cpp
#include<iostream>
using namespace std;
#include<itpp/itbase.h>
using namespace itpp;
int main()
{
vec x(100); // vec == Vec<double>
double y;
x=linspace(1,100,100);
y=sum(x);
cout<<"Hello, World! \n The sum of first 100 integers is: "<<y<<endl;
}
现在编译过程中最重要的是在所有文件之后始终使用-litpp
切换。
$ g++ testITPP.cpp -litpp $./a.out Hello, World! The sum of first 100 integers is: 5050
如果./a.out
产生错误,请运行sudo ldconfig
一次以刷新库缓存。
请注意,早期的编译默认使用共享库,并生成依赖于PC上太多其他二进制文件的二进制文件。即,上述二进制a.out
无法在没有安装IT ++的另一个unix系统上运行,例如这通常会产生问题,尤其是在提交给大学集群和服务器的过程中,这些服务允许用户执行繁重和长时间的计算。
解决方法是使用静态编译,摆脱所有本地依赖项。但这对初学者来说通常很难。使用ITL下的MKL类库,只知道如何静态编译真的很令人沮丧。如何做的一个很好的总结加上我今天注意到的所有错误如下所示。
这是最简单的情况。应注意两个特别重要的变化。一个-litpp
变为-litpp_static
。二,新的编译开关-static
。第一个是IT ++将二进制文件命名为libitpp.so和libitpp_static.a的奇怪选择的结果。
此外,与动态编译不同,将C ++标准库(即-lc和-lm)以外的所有库包含在静态编译中可能是强制性的。这主要包括-lblas -llapack -lfftw -lpthread
和-ldl
。
因此,以下情况之一可能适用于您的情况:
$ g++ -static testITPP.cpp -litpp_static OR $ g++ -static testITPP.cpp -litpp_static -llapack -lblas -lpthread OR $ g++ sctest_PCCestimates.cpp -litpp_static \ -llapack -lblas -lgomp -lpthread \ -lgfortran -static -Wl,--allow-multiple-definition
虽然我还没有看到使用MKL的供应商特定库的速度有多快,但静态编译可能非常痛苦。 MKL的初始安装本身花了一个多小时。即使确切的说明不适合其他供应商库,它也应该让您为即将面临的实际挑战做好准备。
您遇到的错误消息无法理解以下大部分内容。结果他们将非常烦人并且痛苦地解决。我想在下面列出它们。希望他们能节省大量的宝贵时间。
编译期间的循环依赖:前几个库可能需要被-Wl,--start-group .... -Wl,--end-group
包围。
使用特定于供应商的blas / lapack / fftw,您可能需要搜索各自的libblas.a
liblapack.a
libfftw.a
或其等价物,例如libmkl_core.a
。您的供应商特定库。必须使用开关-L/path/to/statics/
即使在成功编译之后,也可能遇到segmentation fault
。这个恼人问题的原因似乎是libpthread.a
并未完全包含在内。然后,您需要强制执行适当的操作,将开关-lpthread
包围为-Wl,--whole-archive -lpthread -Wl,--no-whole-archive
最后在Ubuntu 16.04上对我有用的版本就是这个。请注意,没有-llapack -lblas -lfftw
等,因为它们捆绑在不同名称的静态二进制文件中。
$ g++ -static \ -L/opt/intel/compilers_and_libraries/linux/mkl/lib/intel64_lin/ testITPP.cpp -Wl,--start-group \ -litpp_static \ -lmkl_intel_lp64 \ -lmkl_sequential \ -lmkl_core -Wl,--end-group \ -Wl,--whole-archive -lpthread -Wl,--no-whole-archive \ -ldl
最后,尽管您在上面成功生成了静态二进制文件,但您可能会收到一条警告:warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
可能会出现,但可以忽略,因为显然没有任何解决方案!这与我们无需关心的普遍已知问题有关。
希望其他人编写Windows / Visual-Studio安装指南。
答案 1 :(得分:0)
我认为您可能想要这样的东西?
import React, { Component } from 'react';
import { View, Button } from 'react-native';
class Test extends Component {
state = {
gender: 'male',
maleButtonColor: '#841584',
femaleButtonColor: '#C0C0C0'
}
onSubmitEmailRP() {
this.password.focus();
}
render() {
return (
<View>
<Button
onPress={() => {
this.setState({
gender: 'male',
maleButtonColor: '#841584',
femaleButtonColor: '#C0C0C0'
})
}}
title="Male"
color="#841584"
/>
<Button
onPress={() => {
this.setState({
gender: 'female',
maleButtonColor: '#C0C0C0',
femaleButtonColor: '#841584'
})
}}
title="Female"
color="#841584"
/>
</View>);
}
}
export default Test;
它正在使用基本的 ubuntu 安装过程。我正在使用ubuntu 18.04 LTS。