如何在不使用重定向运算符的情况下重定向链接器错误

时间:2011-10-14 07:08:57

标签: c linux

[这个问题与修复错误无关。但关于重定向它]

我有一个程序(C / linux),由于缺少共享库而在控制台上显示错误。它说“无法加载库......”。如何将此输出重定向到文件?

我在程序中尝试了这个:

close(2);
open("/home/user/test.txt", O_CREAT|O_RDWR);

它正确地重定向程序printfs生成的输出。但是“无法加载库......”仍然出现在控制台上!

我不想使用>为此目的的运营商。我想从我的程序中做到这一点。有什么建议?

由于

5 个答案:

答案 0 :(得分:2)

您需要一个包装器程序。它可能是一个shell脚本。然后重定向尝试运行原始程序。

程序无法捕获在它开始运行之前发生的错误。库链接在任何其他代码运行之前发生。

答案 1 :(得分:2)

错误消息由加载程序生成,该程序在程序启动之前发生。因此,在甚至无法运行以影响加载器行为的程序中,您无法做任何事情。

如果你真的需要摆弄shell使用的文件描述符,请查看exec shell命令以永久关闭和重定向文件描述符。这样你就可以使用重定向操作符>,尽管这可以说是一种不那么整洁的方法。

答案 2 :(得分:1)

似乎在程序启动之前生成了消息 - 所以要重定向它,你必须使用2>运营商。否则你将不得不使用dlopen ...等调用来在运行时进行链接。

答案 3 :(得分:0)

尝试确保环境变量LD_LIBRARY_PATH正确无误。

答案 4 :(得分:0)

警告和;在您的程序开始工作之前出现错误消息,因此只有选项是>运营商

使用这种方式

./a.out >&  filename