首页 > 解决方案 > .Net:如何将 stderr 消息从调用重定向到 DllImported C 函数?

问题描述

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

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

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

$ dotnet MyProgram.dll 2>errors.txt

该文件始终为空,就好像“吞噬”了代码中dotnet的所有 stderr 消息。.so

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

PS -Console.SetError(Console.Out);正如对上述 SO 问题的另一个答案所建议的那样,添加没有产生任何明显的影响。

标签: c#.netshared-librariespinvokedllimport

解决方案


推荐阅读