草庐IT

android - 调用 KeyChain.getPrivateKey 后运行 GC 时出现致命信号 11 (SIGSEGV)

coder 2023-12-22 原文

我的应用程序中收到致命信号 11 (SIGSEGV)。它发生在按下按钮(onClick 被执行)之后,获取 KeyChain 别名的私钥,然后在垃圾收集器下次运行时发生。

更多信息:

  • 我只能在 Samsung Galaxy S3(安装了 Android 4.1.2)上重现此内容
  • 没有 ANR 对话框,应用程序正在关闭
  • 在调用 KeyChain.getPrivateKey 后下次 GC 启动时会发生此错误。

复制示例:

public class MainActivity extends Activity implements KeyChainAliasCallback {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void onClick(View v) throws Exception {
        KeyChain.choosePrivateKeyAlias(this, this, null, null, null, -1, null);
    }

    @Override
    public void alias(String alias) {
        try {
            KeyChain.getPrivateKey(MainActivity.this, alias);
            System.gc(); //Trigger it manually or we could just wait and do some stuff...
        } catch (Exception e) {
            e.printStackTrace(); //No exeption since its a native fatal error
        }
    }
}

堆栈跟踪:

11-14 15:58:25.445: I/InputDispatcher(3755): Delivering touch to current input target: action: 0x5
11-14 15:58:25.650: D/STATUSBAR-NetworkController(4598): refreshSignalCluster: data=0 bt=false
11-14 15:58:25.650: D/STATUSBAR-SignalClusterView(4598): mSeparateMobileGroup=8
11-14 15:58:25.650: D/STATUSBAR-SignalClusterView(4598): mSeparateMobileGroup=8
11-14 15:58:25.650: D/STATUSBAR-SignalClusterView(4598): mSeparateMobileGroup=8
11-14 15:58:25.780: D/dalvikvm(27601): GC_CONCURRENT freed 237K, 10% free 12315K/13639K, paused 29ms+3ms, total 78ms
11-14 15:58:25.815: A/libc(27601): Fatal signal 11 (SIGSEGV) at 0x588c62b2 (code=1), thread 27610 (FinalizerDaemon)
11-14 15:58:25.900: I/InputReader(3755): Touch event's action (MT) is 0x6 (deviceType=0) [pCnt=3, s=1.3858 3.3867 ]
11-14 15:58:25.900: I/InputDispatcher(3755): Delivering touch to current input target: action: 0x6
11-14 15:58:25.900: I/InputDispatcher(3755): Delivering touch to current input target: action: 0x6
11-14 15:58:25.900: I/InputDispatcher(3755): Delivering touch to current input target: action: 0x6
11-14 15:58:25.935: I/DEBUG(501): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
11-14 15:58:25.935: I/DEBUG(501): Build fingerprint: 'samsung/m0xx/m0:4.1.2/JZO54K/I9300XXELL4:user/release-keys'
11-14 15:58:25.935: I/DEBUG(501): pid: 27601, tid: 27610, name: FinalizerDaemon  >>> com.example.crash <<<
11-14 15:58:25.935: I/DEBUG(501): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 588c62b2
11-14 15:58:25.935: I/InputReader(3755): Touch event's action (MT) is 0x5 (deviceType=0) [pCnt=3, s=0.3869 1.3858 3.3867 ]
11-14 15:58:25.935: I/InputDispatcher(3755): Delivering touch to current input target: action: 0x5
11-14 15:58:25.935: I/InputDispatcher(3755): Delivering touch to current input target: action: 0x5
11-14 15:58:25.935: I/InputDispatcher(3755): Delivering touch to current input target: action: 0x5
11-14 15:58:25.985: I/InputReader(3755): Touch event's action (MT) is 0x6 (deviceType=0) [pCnt=3, s=1.3858 3.3867 ]
11-14 15:58:25.985: I/InputDispatcher(3755): Delivering touch to current input target: action: 0x6
11-14 15:58:25.985: I/InputDispatcher(3755): Delivering touch to current input target: action: 0x6
11-14 15:58:25.985: I/InputDispatcher(3755): Delivering touch to current input target: action: 0x6
11-14 15:58:26.010: I/InputReader(3755): Touch event's action (MT) is 0x106 (deviceType=0) [pCnt=2, s=1.3858 ]
11-14 15:58:26.010: I/InputDispatcher(3755): Delivering touch to current input target: action: 0x106
11-14 15:58:26.010: I/InputDispatcher(3755): Delivering touch to current input target: action: 0x106
11-14 15:58:26.010: I/InputDispatcher(3755): Delivering touch to current input target: action: 0x106
11-14 15:58:26.280: I/DEBUG(501):     r0 5707b358  r1 5707b4b0  r2 5707b388  r3 00000000
11-14 15:58:26.280: I/DEBUG(501):     r4 40f94820  r5 00000000  r6 00000001  r7 588c62b3
11-14 15:58:26.280: I/DEBUG(501):     r8 5707b388  r9 40f94824  sl 5707b358  fp 5d05ec94
11-14 15:58:26.280: I/DEBUG(501):     ip 00000000  sp 5d05ec28  lr 40a67ea3  pc 588c62b2  cpsr 80000030
11-14 15:58:26.280: I/DEBUG(501):     d0  42c8000042b431a1  d1  3ff0000000bd4278
11-14 15:58:26.280: I/DEBUG(501):     d2  0000000100000001  d3  0000000000000000
11-14 15:58:26.280: I/DEBUG(501):     d4  0000000000000000  d5  0000000000000000
11-14 15:58:26.280: I/DEBUG(501):     d6  00d20ff000000000  d7  0000005a4e93dbee
11-14 15:58:26.280: I/DEBUG(501):     d8  0000000000000000  d9  0000000000000000
11-14 15:58:26.280: I/DEBUG(501):     d10 0000000000000000  d11 0000000000000000
11-14 15:58:26.280: I/DEBUG(501):     d12 0000000000000000  d13 0000000000000000
11-14 15:58:26.280: I/DEBUG(501):     d14 0000000000000000  d15 0000000000000000
11-14 15:58:26.280: I/DEBUG(501):     d16 3fe0000000000000  d17 3fe999999999999a
11-14 15:58:26.280: I/DEBUG(501):     d18 0033003200310030  d19 0000000000000000
11-14 15:58:26.280: I/DEBUG(501):     d20 4008000000000000  d21 3fbc71c71c71c71c
11-14 15:58:26.280: I/DEBUG(501):     d22 3fcc7288e957b53b  d23 3fd24998d6307188
11-14 15:58:26.280: I/DEBUG(501):     d24 3fd99a27ad32ddf5  d25 3fe555b0aaeac752
11-14 15:58:26.280: I/DEBUG(501):     d26 0000000000000000  d27 0000000000000000
11-14 15:58:26.280: I/DEBUG(501):     d28 0000000000000005  d29 0000000000000000
11-14 15:58:26.280: I/DEBUG(501):     d30 0000000000000000  d31 0000000000000000
11-14 15:58:26.280: I/DEBUG(501):     scr 80000010
11-14 15:58:26.290: I/DEBUG(501): backtrace:
11-14 15:58:26.290: I/DEBUG(501):     #00  pc 588c62b2  <unknown>
11-14 15:58:26.290: I/DEBUG(501):     #01  pc 00038ea1  /system/lib/libcrypto.so
11-14 15:58:26.290: I/DEBUG(501):     #02  pc 00038d43  /system/lib/libcrypto.so (CRYPTO_free_ex_data+34)
11-14 15:58:26.290: I/DEBUG(501):     #03  pc 0008ac69  /system/lib/libcrypto.so (RSA_free+60)
11-14 15:58:26.290: I/DEBUG(501):     #04  pc 000742bf  /system/lib/libcrypto.so (EVP_PKEY_free+46)
11-14 15:58:26.290: I/DEBUG(501):     #05  pc 0001deb0  /system/lib/libdvm.so (dvmPlatformInvoke+112)
11-14 15:58:26.290: I/DEBUG(501):     #06  pc 0004d103  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+394)
11-14 15:58:26.290: I/DEBUG(501):     #07  pc 000272e0  /system/lib/libdvm.so
11-14 15:58:26.290: I/DEBUG(501):     #08  pc 0002bbe8  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+180)
11-14 15:58:26.290: I/DEBUG(501):     #09  pc 0005f871  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+272)
11-14 15:58:26.290: I/DEBUG(501):     #10  pc 0005f89b  /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20)
11-14 15:58:26.290: I/DEBUG(501):     #11  pc 00054453  /system/lib/libdvm.so
11-14 15:58:26.290: I/DEBUG(501):     #12  pc 00012e00  /system/lib/libc.so (__thread_entry+48)
11-14 15:58:26.290: I/DEBUG(501):     #13  pc 00012558  /system/lib/libc.so (pthread_create+172)
11-14 15:58:26.290: I/DEBUG(501): stack:
11-14 15:58:26.290: I/DEBUG(501):          5d05ebe8  40de9f64  
11-14 15:58:26.290: I/DEBUG(501):          5d05ebec  5707b358  
11-14 15:58:26.290: I/DEBUG(501):          5d05ebf0  5d05ec94  
11-14 15:58:26.290: I/DEBUG(501):          5d05ebf4  400b9f81  /system/lib/libc.so (malloc+12)
11-14 15:58:26.290: I/DEBUG(501):          5d05ebf8  400b9f75  /system/lib/libc.so (malloc)
11-14 15:58:26.290: I/DEBUG(501):          5d05ebfc  40a66927  /system/lib/libcrypto.so
11-14 15:58:26.290: I/DEBUG(501):          5d05ec00  40b00000  /system/lib/libcrypto.so
11-14 15:58:26.290: I/DEBUG(501):          5d05ec04  40a66df9  /system/lib/libcrypto.so (CRYPTO_malloc+68)
11-14 15:58:26.290: I/DEBUG(501):          5d05ec08  00000002  
11-14 15:58:26.290: I/DEBUG(501):          5d05ec0c  40a66649  /system/lib/libcrypto.so (CRYPTO_lock+80)
11-14 15:58:26.290: I/DEBUG(501):          5d05ec10  40f94820  
11-14 15:58:26.290: I/DEBUG(501):          5d05ec14  5707b1d8  
11-14 15:58:26.290: I/DEBUG(501):          5d05ec18  5707b228  
11-14 15:58:26.290: I/DEBUG(501):          5d05ec1c  40f94820  
11-14 15:58:26.290: I/DEBUG(501):          5d05ec20  df0027ad  
11-14 15:58:26.290: I/DEBUG(501):          5d05ec24  00000000  
11-14 15:58:26.290: I/DEBUG(501):     #00  5d05ec28  00000000  
11-14 15:58:26.290: I/DEBUG(501):          ........  ........
11-14 15:58:26.290: I/DEBUG(501):     #01  5d05ec28  00000000  
11-14 15:58:26.290: I/DEBUG(501):          5d05ec2c  00000000  
11-14 15:58:26.290: I/DEBUG(501):          5d05ec30  5707b388  
11-14 15:58:26.290: I/DEBUG(501):          5d05ec34  5707b358  
11-14 15:58:26.290: I/DEBUG(501):          5d05ec38  00000006  
11-14 15:58:26.290: I/DEBUG(501):          5d05ec3c  40de9f6c  
11-14 15:58:26.290: I/DEBUG(501):          5d05ec40  5d05ec80  
11-14 15:58:26.290: I/DEBUG(501):          5d05ec44  40de9f64  
11-14 15:58:26.290: I/DEBUG(501):          5d05ec48  40d2d820  
11-14 15:58:26.290: I/DEBUG(501):          5d05ec4c  40a67d45  /system/lib/libcrypto.so (CRYPTO_free_ex_data+36)
11-14 15:58:26.290: I/DEBUG(501):     #02  5d05ec50  5707b358  
11-14 15:58:26.290: I/DEBUG(501):          5d05ec54  40d2d810  
11-14 15:58:26.290: I/DEBUG(501):          5d05ec58  00000000  
11-14 15:58:26.290: I/DEBUG(501):          5d05ec5c  40ab9c6d  /system/lib/libcrypto.so (RSA_free+64)
11-14 15:58:26.295: I/DEBUG(501): memory near r0:
11-14 15:58:26.300: I/DEBUG(501):     5707b338 00000005 0000001b 57366e40 00000024  ........@n6W$...
11-14 15:58:26.300: I/DEBUG(501):     5707b348 00000000 00000000 00000001 00000063  ............c...
11-14 15:58:26.300: I/DEBUG(501):     5707b358 00000000 00000000 588c8014 5707afc8  ...........X...W
11-14 15:58:26.300: I/DEBUG(501):     5707b368 5707b3f8 5707b498 00000000 00000000  ...W...W........
11-14 15:58:26.300: I/DEBUG(501):     5707b378 00000000 00000000 00000000 00000000  ................
11-14 15:58:26.300: I/DEBUG(501): memory near r1:
11-14 15:58:26.300: I/DEBUG(501):     5707b490 00000000 0000001b 5707b3b8 00000001  ...........W....
11-14 15:58:26.300: I/DEBUG(501):     5707b4a0 00000001 00000000 00000001 00000023  ............#...
11-14 15:58:26.300: I/DEBUG(501):     5707b4b0 30303031 5253555f 59454b50 3530445f  1000_USRPKEY_D05
11-14 15:58:26.300: I/DEBUG(501):     5707b4c0 37393333 00000000 00000000 0000001b  3397............
11-14 15:58:26.300: I/DEBUG(501):     5707b4d0 5707b4e8 00000020 00000021 00000000  ...W ...!.......
11-14 15:58:26.300: I/DEBUG(501): memory near r2:
11-14 15:58:26.300: I/DEBUG(501):     5707b368 5707b3f8 5707b498 00000000 00000000  ...W...W........
11-14 15:58:26.300: I/DEBUG(501):     5707b378 00000000 00000000 00000000 00000000  ................
11-14 15:58:26.300: I/DEBUG(501):     5707b388 5707b3c8 ffffffff 00000000 000000a6  ...W............
11-14 15:58:26.300: I/DEBUG(501):     5707b398 00000000 00000000 00000000 00000000  ................
11-14 15:58:26.300: I/DEBUG(501):     5707b3a8 00000000 00000000 00000000 00000013  ................
11-14 15:58:26.300: I/DEBUG(501): memory near r4:
11-14 15:58:26.300: I/DEBUG(501):     40f94800 5ad4ac4c 5879e008 0042a340 5b174f8c  L..Z..yX@.B..O.[
11-14 15:58:26.300: I/DEBUG(501):     40f94810 000000f8 00000000 00000000 00000013  ................
11-14 15:58:26.300: I/DEBUG(501):     40f94820 5707b228 400ec534 00000010 0000004b  (..W4..@....K...
11-14 15:58:26.300: I/DEBUG(501):     40f94830 00000002 00000026 41dd71d8 41dd7358  ....&....q.AXs.A
11-14 15:58:26.300: I/DEBUG(501):     40f94840 7379732f 2f6d6574 6d617266 726f7765  /system/framewor
11-14 15:58:26.300: I/DEBUG(501): memory near r7:
11-14 15:58:26.300: I/DEBUG(501):     588c6290 ffffffff ffffffff ffffffff ffffffff  ................
11-14 15:58:26.300: I/DEBUG(501):     588c62a0 ffffffff ffffffff ffffffff ffffffff  ................
11-14 15:58:26.300: I/DEBUG(501):     588c62b0 ffffffff ffffffff ffffffff ffffffff  ................
11-14 15:58:26.300: I/DEBUG(501):     588c62c0 ffffffff ffffffff ffffffff ffffffff  ................
11-14 15:58:26.300: I/DEBUG(501):     588c62d0 ffffffff ffffffff ffffffff ffffffff  ................
11-14 15:58:26.300: I/DEBUG(501): memory near r8:
11-14 15:58:26.300: I/DEBUG(501):     5707b368 5707b3f8 5707b498 00000000 00000000  ...W...W........
11-14 15:58:26.300: I/DEBUG(501):     5707b378 00000000 00000000 00000000 00000000  ................
11-14 15:58:26.300: I/DEBUG(501):     5707b388 5707b3c8 ffffffff 00000000 000000a6  ...W............
11-14 15:58:26.300: I/DEBUG(501):     5707b398 00000000 00000000 00000000 00000000  ................
11-14 15:58:26.300: I/DEBUG(501):     5707b3a8 00000000 00000000 00000000 00000013  ................
11-14 15:58:26.300: I/DEBUG(501): memory near r9:
11-14 15:58:26.300: I/DEBUG(501):     40f94804 5879e008 0042a340 5b174f8c 000000f8  ..yX@.B..O.[....
11-14 15:58:26.300: I/DEBUG(501):     40f94814 00000000 00000000 00000013 5707b228  ............(..W
11-14 15:58:26.300: I/DEBUG(501):     40f94824 400ec534 00000010 0000004b 00000002  4..@....K.......
11-14 15:58:26.300: I/DEBUG(501):     40f94834 00000026 41dd71d8 41dd7358 7379732f  &....q.AXs.A/sys
11-14 15:58:26.300: I/DEBUG(501):     40f94844 2f6d6574 6d617266 726f7765 77742f6b  tem/framework/tw
11-14 15:58:26.300: I/DEBUG(501): memory near sl:
11-14 15:58:26.300: I/DEBUG(501):     5707b338 00000005 0000001b 57366e40 00000024  ........@n6W$...
11-14 15:58:26.300: I/DEBUG(501):     5707b348 00000000 00000000 00000001 00000063  ............c...
11-14 15:58:26.300: I/DEBUG(501):     5707b358 00000000 00000000 588c8014 5707afc8  ...........X...W
11-14 15:58:26.300: I/DEBUG(501):     5707b368 5707b3f8 5707b498 00000000 00000000  ...W...W........
11-14 15:58:26.300: I/DEBUG(501):     5707b378 00000000 00000000 00000000 00000000  ................
11-14 15:58:26.300: I/DEBUG(501): memory near fp:
11-14 15:58:26.300: I/DEBUG(501):     5d05ec74 1de00001 5732b260 40858eb4 40de9f64  ....`.2W...@d..@
11-14 15:58:26.300: I/DEBUG(501):     5d05ec84 00000001 4112f0c8 00000008 00000000  .......A........
11-14 15:58:26.300: I/DEBUG(501):     5d05ec94 40888107 40de9f64 586073d9 40fc2b7f  ...@d..@.s`X.+.@
11-14 15:58:26.300: I/DEBUG(501):     5d05eca4 40d2d820 1de00001 00000000 00000000   ..@............
11-14 15:58:26.300: I/DEBUG(501):     5d05ecb4 400f3a6c 00000000 00000000 00000000  l:.@............
11-14 15:58:26.300: I/DEBUG(501): memory near sp:
11-14 15:58:26.300: I/DEBUG(501):     5d05ec08 00000002 40a66649 40f94820 5707b1d8  ....If.@ H.@...W
11-14 15:58:26.300: I/DEBUG(501):     5d05ec18 5707b228 40f94820 df0027ad 00000000  (..W H.@.'......
11-14 15:58:26.300: I/DEBUG(501):     5d05ec28 00000000 00000000 5707b388 5707b358  ...........WX..W
11-14 15:58:26.300: I/DEBUG(501):     5d05ec38 00000006 40de9f6c 5d05ec80 40de9f64  ....l..@...]d..@
11-14 15:58:26.300: I/DEBUG(501):     5d05ec48 40d2d820 40a67d45 5707b358 40d2d810   ..@E}.@X..W...@
11-14 15:58:26.300: I/DEBUG(501): code around pc:
11-14 15:58:26.300: I/DEBUG(501):     588c6290 ffffffff ffffffff ffffffff ffffffff  ................
11-14 15:58:26.300: I/DEBUG(501):     588c62a0 ffffffff ffffffff ffffffff ffffffff  ................
11-14 15:58:26.305: I/DEBUG(501):     588c62b0 ffffffff ffffffff ffffffff ffffffff  ................
11-14 15:58:26.305: I/DEBUG(501):     588c62c0 ffffffff ffffffff ffffffff ffffffff  ................
11-14 15:58:26.305: I/DEBUG(501):     588c62d0 ffffffff ffffffff ffffffff ffffffff  ................
11-14 15:58:26.305: I/DEBUG(501): code around lr:
11-14 15:58:26.305: I/DEBUG(501):     40a67e80 4629b178 f7ff4640 f859ff99 683b7c04  x.)F@F....Y..|;h
11-14 15:58:26.305: I/DEBUG(501):     40a67e90 462b9300 9201687a 68ff4642 46504601  ..+Fzh..BF.h.FPF
11-14 15:58:26.305: I/DEBUG(501):     40a67ea0 350147b8 dbe742b5 4620b114 f870f7ff  .G.5.B.... F..p.
11-14 15:58:26.305: I/DEBUG(501):     40a67eb0 0000f8d8 f055b120 2100fb3c 1000f8c8  .... .U.<..!....
11-14 15:58:26.305: I/DEBUG(501):     40a67ec0 87fce8bd 0006a592 0006a54a 47ffe92d  ........J...-..G
11-14 15:58:26.305: I/DEBUG(501): memory map around fault addr 588c62b2:
11-14 15:58:26.305: I/DEBUG(501):     588be000-588c5000 /system/framework/core-junit.odex
11-14 15:58:26.305: I/DEBUG(501):     (no map for address)
11-14 15:58:26.305: I/DEBUG(501):     588d0000-588d1000 
11-14 15:58:26.480: I/DEBUG(501): !@dumpstate -k -t -z -d -o /data/log/dumpstate_app_native -m 27601
11-14 15:58:26.485: I/BootReceiver(3755): Copying /data/tombstones/tombstone_02 to DropBox (SYSTEM_TOMBSTONE)
11-14 15:58:26.510: I/dumpstate(28057): begin
11-14 15:58:26.655: D/STATUSBAR-NetworkController(4598): refreshSignalCluster: data=0 bt=false
11-14 15:58:26.655: D/STATUSBAR-SignalClusterView(4598): mSeparateMobileGroup=8
11-14 15:58:26.655: D/STATUSBAR-SignalClusterView(4598): mSeparateMobileGroup=8
11-14 15:58:26.655: D/STATUSBAR-SignalClusterView(4598): mSeparateMobileGroup=8
11-14 15:58:26.695: I/InputReader(3755): Touch event's action (MT) is 0x5 (deviceType=0) [pCnt=2, s=0.3870 1.3858 2.3871 ]
11-14 15:58:26.695: I/InputReader(3755): Touch event's action (MT) is 0x205 (deviceType=0) [pCnt=3, s=0.3870 1.3858 2.3871 ]

最佳答案

这似乎是 Android 操作系统中的一个错误,已在 4.2 中修复: https://code.google.com/p/android/issues/detail?id=62319

我目前的解决方法是在静态变量中保存对私钥的引用。

关于android - 调用 KeyChain.getPrivateKey 后运行 GC 时出现致命信号 11 (SIGSEGV),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19981630/

有关android - 调用 KeyChain.getPrivateKey 后运行 GC 时出现致命信号 11 (SIGSEGV)的更多相关文章

  1. ruby - ECONNRESET (Whois::ConnectionError) - 尝试在 Ruby 中查询 Whois 时出错 - 2

    我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.

  2. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  3. 使用 ACL 调用 upload_file 时出现 Ruby S3 "Access Denied"错误 - 2

    我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file

  4. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  5. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  6. ruby - 调用其他方法的 TDD 方法的正确方法 - 2

    我需要一些关于TDD概念的帮助。假设我有以下代码defexecute(command)casecommandwhen"c"create_new_characterwhen"i"display_inventoryendenddefcreate_new_character#dostufftocreatenewcharacterenddefdisplay_inventory#dostufftodisplayinventoryend现在我不确定要为什么编写单元测试。如果我为execute方法编写单元测试,那不是几乎涵盖了我对create_new_character和display_invent

  7. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  8. ruby - 安装libv8(3.11.8.13)出错,Bundler无法继续 - 2

    运行bundleinstall后出现此错误:Gem::Package::FormatError:nometadatafoundin/Users/jeanosorio/.rvm/gems/ruby-1.9.3-p286/cache/libv8-3.11.8.13-x86_64-darwin-12.gemAnerroroccurredwhileinstallinglibv8(3.11.8.13),andBundlercannotcontinue.Makesurethat`geminstalllibv8-v'3.11.8.13'`succeedsbeforebundling.我试试gemin

  9. C51单片机——实现用独立按键控制LED亮灭(调用函数篇) - 2

    说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时

  10. ruby - 使用 postgres.app 在 rvm 下要求 pg 时出错 - 2

    我正在使用Postgres.app在OSX(10.8.3)上。我已经修改了我的PATH,以便应用程序的bin文件夹位于所有其他文件夹之前。Rammy:~phrogz$whichpg_config/Applications/Postgres.app/Contents/MacOS/bin/pg_config我已经安装了rvm并且可以毫无错误地安装pggem,但是当我需要它时我得到一个错误:Rammy:~phrogz$gem-v1.8.25Rammy:~phrogz$geminstallpgFetching:pg-0.15.1.gem(100%)Buildingnativeextension

随机推荐