[这个问题与修复错误无关。但关于重定向它]
我有一个程序(C / linux),由于缺少共享库而在控制台上显示错误。它说“无法加载库......”。如何将此输出重定向到文件?
我在程序中尝试了这个:
close(2);
open("/home/user/test.txt", O_CREAT|O_RDWR);
它正确地重定向程序printfs生成的输出。但是“无法加载库......”仍然出现在控制台上!
我不想使用>为此目的的运营商。我想从我的程序中做到这一点。有什么建议?
由于
答案 0 :(得分:2)
您需要一个包装器程序。它可能是一个shell脚本。然后重定向尝试运行原始程序。
程序无法捕获在它开始运行之前发生的错误。库链接在任何其他代码运行之前发生。
答案 1 :(得分:2)
错误消息由加载程序生成,该程序在程序启动之前发生。因此,在甚至无法运行以影响加载器行为的程序中,您无法做任何事情。
如果你真的需要摆弄shell使用的文件描述符,请查看exec
shell命令以永久关闭和重定向文件描述符。这样你就可以使用重定向操作符>
,尽管这可以说是一种不那么整洁的方法。
答案 2 :(得分:1)
似乎在程序启动之前生成了消息 - 所以要重定向它,你必须使用2>运营商。否则你将不得不使用dlopen ...等调用来在运行时进行链接。
答案 3 :(得分:0)
尝试确保环境变量LD_LIBRARY_PATH
正确无误。
答案 4 :(得分:0)
使用这种方式
./a.out >& filename