我正在尝试使用UCCntu上的GCC 5.1编译一个用C++ 11特性编写的库.但是,抱怨std::unique_ptr没有定义.
gcc (Ubuntu 5.1.0-0ubuntu11~14.04.1) 5.1.0
g++ (Ubuntu 5.1.0-0ubuntu11~14.04.1) 5.1.0
Run Code Online (Sandbox Code Playgroud)
CXX标志:
-std=c++11 -Wall -Wextra -Weffc++ -pedantic
Run Code Online (Sandbox Code Playgroud)
输出:
error: ‘unique_ptr’ in namespace ‘std’ does not name a template type
std::unique_ptr< detail::RegexImpl > m_pimpl;
Run Code Online (Sandbox Code Playgroud)
但是,我能够在OSX上编译完全相同的代码.
Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
Run Code Online (Sandbox Code Playgroud)
CXX标志:
-stdlib=libc++ -std=c++11 -Wall -Wextra -Weffc++ -pedantic
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
在我的应用程序中,当他们在初始设置[指纹注册]中扫描他们的手指时,我保存了用户访问代码的加密版本.当用户稍后尝试解锁应用程序时,我将尝试使用指纹API [指纹验证]解密此访问代码.
但是,Cipher.doFinal在解密时抛出以下异常:
javax.crypto.BadPaddingException
at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:482)
at javax.crypto.Cipher.doFinal(Cipher.java:1502)
(...)
Caused by: android.security.KeyStoreException: Invalid argument
at android.security.KeyStore.getKeyStoreException(KeyStore.java:940)
at android.security.keystore.KeyStoreCryptoOperationChunkedStreamer.doFinal(KeyStoreCryptoOperationChunkedStreamer.java:224)
at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:473)
... 12 more
Run Code Online (Sandbox Code Playgroud)
指纹扫描仪显示在DialogFragment.无论指纹是否正在注册或验证,始终从构造函数按顺序调用以下函数.
初始化密钥库:
private void initializeKeystore() {
try {
mKeyStore = KeyStore.getInstance(KEY_STORE_NAME); //AndroidKeyStore
} catch (KeyStoreException e) {
mKeyStore = null;
}
try {
mKeyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, KEY_STORE_NAME);
} catch (NoSuchAlgorithmException | NoSuchProviderException e) {
mKeyGenerator = null;
}
}
Run Code Online (Sandbox Code Playgroud)
创建一个键:
private void createKey() {
if (mKeyGenerator != null) {
try {
mKeyStore.load(null);
KeyGenParameterSpec.Builder …Run Code Online (Sandbox Code Playgroud) 自然,尽管Android Lint不知道,但是ButterKnife字段不能声明为私有。但是,不是我的所有字段都像这样:
@SuppressWarnings("WeakerAccess") @BindView(R.id.foo) Bar mFoo;
Run Code Online (Sandbox Code Playgroud)
我喜欢更干净的方法
@BindView(R.id.foo) Bar mFoo;
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想避免WeakerAccess对整个班级都取消警告,或者在我的检查配置文件中完全禁用它,因为这是有用的警告。
对于@BindView在Android Studio中使用注释的任何字段,是否有任何方法可以自动取消此警告?
android ×2
java ×2
android-lint ×1
butterknife ×1
c++ ×1
c++11 ×1
encryption ×1
fingerprint ×1
gcc5 ×1