.Net:如何将 stderr 消息从调用重定向到 DllImported C 函数?

问题描述

我有一个在 Linux 中运行的 .net core 3.1 控制台应用程序。应用程序调用驻留在动态链接的共享对象库中的函数,如下所示:

[DllImport("lib/foo.so",CallingConvention = CallingConvention.Cdecl)]
static extern void Foo();

C 函数 Foo() 写入 stderr,然后在遇到问题时写入 abort()。当我运行控制台应用程序并出现此类问题时,即使我将它们重定向到文件,我也看不到任何 stderr 消息:

$ dotnet MyProgram.dll 2>errors.txt

文件总是空的,好像 dotnet “吞下”了 .so 代码中的所有 stderr 消息。

我的问题是 - 如何将 dotnet 消息从我的 stderr 文件中的 C 代码重定向到 stderr、stdout 或文件?我发现 this SO question 有 Windows 的答案。 Linux 有没有类似的解决方案?

PS - 按照上述 SO 问题的另一个答案中的建议,添加 .so 没有任何明显影响。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)