安装EBS R12.1.1-error while loading shared libraries: libdb.so.2

本文记录了在安装OracleEBSR12.1.1过程中遇到的Apache启动失败问题及解决方案。问题表现为无法加载libdb.so.2共享库文件,通过创建软链接libgdbm.so.2.0.0至libdb.so.2成功解决了该问题。
安装Oracle EBS R12.1.1 ,    在最后检测的时候发现错误, http开不起来, 其他服务可以开启, 查询开启 apache 的log , 发现错误  /10.1.3/Apache/Apache/bin/httpd: error while loading shared
libraries: libdb.so.2: cannot open shared object file: No such file or directory
  。   

在Metalink 查询发现解决方法; 

Attempting to Start Apache (adapcctl.sh) Throws an 'Error While Loading Shared Libraries: libdb.so.2' on RedHat Linux 5 [ID 879522.1]     

Cause

Review the HTTP log file. The error is very clear about the missing soft link. It would show this error:
...
/10.1.3/Apache/Apache/bin/apachectl startssl: execing httpd
/10.1.3/Apache/Apache/bin/httpd: error while loading shared
libraries: libdb.so.2: cannot open shared object file: No such file or directory

...

Soft link libdb.so.2 is missing.

Solution

To implement the solution, please execute the following steps:

1. Shut down all Oracle Application Services.

2. As the unix root user, create a soft link as follows:

ln -s /usr/lib/libgdbm.so.2.0.0 /usr/lib/libdb.so.2

3. Start up all Oracle Application Services.

This requirement is outlined in the 'Follow Operating System Requirements for OEL 5.x or RHEL 5.x' section of Note 564174.1 - "Oracle Application Server 10g (10.1.2) Requirements for Linux : OEL 5 and RHEL 5".





来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-766416/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/35489/viewspace-766416/

Process: com.niksoftware.snapseed, PID: 21483 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: duy: The exception was not handled due to missing onError handler in the subscribe() method call. Further reading: https://github.com/ReactiveX/RxJava/wiki/Error-Handling | java.lang.NullPointerException: items is null 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at eel.a(PG:9) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dwi.cB(PG:8) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at eco.run(PG:7) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dum.run(PG:3) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:959) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:100) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:282) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at android.os.Looper.loop(Looper.java:387) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:9500) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:600) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1005) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: Caused by: java.lang.NullPointerException: items is null 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dvv.a(PG:6) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dty.j(PG:3) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at aew.call(PG:282) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dze.u(PG:3) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dty.t(PG:13) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dzo.u(PG:10) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dty.t(PG:13) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at ebs.u(PG:13) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dty.t(PG:13) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at eag.u(PG:10) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dty.t(PG:13) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dzs.u(PG:9) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dty.t(PG:13) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at eag.u(PG:10) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dty.t(PG:13) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at ebt.q(PG:13) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dug.p(PG:13) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at eda.q(PG:43) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dug.p(PG:13) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at ecu.run(PG:3) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at dub.run(PG:10) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at eds.run(PG:14) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at eds.call(PG:1) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at java.util.concurrent.FutureTask.run(FutureTask.java:317) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:348) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651) 07-18 13:37:50.822581 21483 21483 E AndroidRuntime: at java.lang.Thread.run(Thread.java:1119) 分析一下这个crash的原因
最新发布
08-22
<think>我们有一个来自Snapseed应用(com.niksoftware.snapseed)的崩溃日志。崩溃的原因是RxJava中未处理的NullPointerException。 关键点: 1. 错误信息:"The exception was not handled due to missing onError handler in the subscribe() method call" 这意味着在RxJava的调用链中,有一个可观察对象(Observable)发出了一个错误(onError事件),但没有设置onError处理程序。 2. 具体的异常:java.lang.NullPointerException: items is null 在RxJava中,当操作符要求一个非空的集合或数组,但传入的是null时,会抛出这个异常。 从堆栈跟踪看: - 最开始的调用:在`eel.a`(可能是某个RxJava操作符或自定义操作符)中抛出了NPE,原因是“items is null”。 - 然后错误被传递到`dwi.cB`(可能是RxJava的某个内部处理类),再传递到`eco.run`(可能是调度器线程),最后在`dum.run`(可能是Handler处理的Runnable)中。 - 错误一直传递,直到被RxJava的内部机制捕获,发现没有设置onError处理程序,于是抛给了全局的异常处理器(导致应用崩溃)。 堆栈中还有: Caused by: java.lang.NullPointerException: items is null at dvv.a(PG:6) // 这里可能是源头,比如一个fromIterable操作符传入null at dty.j(PG:3) ... 后续是RxJava的调用链 从堆栈的深度和RxJava操作符的调用链来看,这是一个较长的RxJava流,其中某个操作符期望得到一个非空的集合,但实际传入的是null。 常见原因: 在RxJava中,类似`Observable.fromIterable(null)`会抛出NullPointerException,并提示"items is null"。 解决方案: 1. 在调用`fromIterable`(或类似操作)之前,检查传入的集合是否为null,如果可能为null,则替换为空集合(例如:`list == null ? Collections.emptyList() : list`)。 2. 在订阅的时候,一定要添加onError处理程序,即使只是记录日志,这样就不会导致崩溃。 根据堆栈,我们还可以看到这个RxJava流最终是在主线程的Handler中处理的(android.os.Handler.handleCallback),所以这个流是在主线程上订阅和处理的。 具体步骤: 1. 定位到代码中抛出异常的位置:根据堆栈中的方法名(如dvv.a)和行号(PG:6)去查找对应的代码位置(需要符号表或反编译)。 2. 检查该位置是否使用了`fromIterable`、`fromArray`等操作符,并且传入的参数是否可能为null。 3. 添加空值检查,并确保在RxJava流中处理可能的null值。 另外,由于崩溃发生在主线程,且没有捕获异常,所以导致应用崩溃。 总结: 崩溃的直接原因是RxJava操作符传入了一个null集合(导致NPE),并且在整个RxJava调用链中没有设置onError处理程序,所以错误被传递到默认的异常处理,导致应用崩溃。 如何避免: - 在使用可能为null的集合时,进行空值检查。 - 在订阅RxJava流时,始终添加onError处理程序。 根据以上分析,提出相关问题: 1. RxJava中常见的导致NullPointerException的操作有哪些? 2. 如何在RxJava中正确设置错误处理以避免应用崩溃? 3. 如何通过代码审查或静态分析工具预防RxJava中的空指针异常? 4. 在Android开发中,主线程的RxJava流发生未捕获异常会导致什么后果? 注意:按照要求,在最后输出“§§相关问题§§”并列出3-5个问题。</think>### Crash分析:Snapseed的RxJava未处理空指针异常 #### **直接原因** RxJava操作链中出现`NullPointerException`(`items is null`),且未设置`onError`错误处理回调,导致异常穿透到主线程引发崩溃: ```java // 关键错误点 dvv.a(PG:6) // 引发NPE的源头:items为null dty.j(PG:3) // 操作符调用链 aew.call(PG:282) // RxJava操作符执行 ``` #### **根本原因分层解析** | 层级 | 问题 | 技术细节 | |------|------|----------| | **数据层** | 空集合传递 | • `dvv.a()`方法接收`null`集合<br>• 未做空值检查直接使用<br>• 可能源于网络请求/数据库返回空数据 | | **RxJava层** | 错误处理缺失 | • 未设置`onError`回调(日志明确提示)<br>• `subscribe()`未实现错误处理<br>• 操作符链(`dty.t`多次调用)未捕获异常 | | **线程调度** | 主线程崩溃 | • 最终在`Handler.handleCallback`主线程抛出<br>• 使用`ScheduledThreadPoolExecutor`但未跨线程捕获异常 | #### **关键代码路径** ```plaintext Rx操作链: dvv.a() -> dty.j() -> aew.call() -> dze.u() -> ... -> eda.q() ↓ 线程切换: dub.run() -> eds.run() -> ThreadPoolExecutor ↓ 主线程崩溃: Handler.handleCallback() -> Looper.loop() -> ActivityThread.main() ``` #### **解决方案** ##### 1. 立即修复(空值防御) ```java // 在数据源头添加空检查 Observable.fromIterable(items == null ? Collections.emptyList() : items) .flatMap(item -> ...) ``` ##### 2. 错误处理强化 ```java // 必须添加onError回调 someObservable .subscribe( result -> updateUI(result), error -> { // 错误处理 Log.e("RxError", error.getMessage()); showEmptyView(); } ); ``` ##### 3. 安全操作符封装 ```java // 创建空安全操作符 public static <T> Observable<T> safeFromIterable(List<T> list) { return Observable.defer(() -> list != null ? Observable.fromIterable(list) : Observable.empty() ); } ``` #### **预防措施** 1. **强制错误处理规则** ```gradle // 添加RxJavaLint检查 dependencies { implementation 'nl.littlerobots.rxlint:rxlint:1.7.6' } ``` 2. **单元测试覆盖** ```java @Test public void testNullInputHandling() { // 模拟空数据输入 TestObserver<Item> testObserver = repository.getItems(null).test(); testObserver.assertNoErrors(); // 必须通过 } ``` 3. **代码审查重点** - 所有`subscribe()`调用必须包含`onError` - 集合操作前必须空检查 - 避免在`flatMap`/`map`中直接解引用 #### **根本原因总结** RxJava操作链中`dvv.a()`方法接收到`null`集合(可能源于数据层异常),由于未设置`onError`回调,导致空指针异常穿透整个操作符链,最终在主线程触发未捕获异常崩溃。核心问题是**数据层空值防御缺失**和**RxJava错误处理机制未启用**的双重失误。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值