c# - .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++ - cout 读取文件后不打印
- windows - 为什么 Powershell 的 Get-ItemProperty 没有返回与 regedit.exe 中相同的值?
- regex - 后字符串的正则表达式允许一个'/'
- json - 如果 json 数据包含换行符(“\n”),则 Swift 4 无法正确解码
- c++ - 对“__std_terminate”的未定义引用
- mysql - 我如何将此查询转换为子查询 SQL
- android - 我如何在 Surfaceview 上绘制任何已经渲染相机预览的线?
- java - java.lang.Integer 不能转换为 java.math.BigInteger
- php - 如果其中之一设置为 true php,则为非活动数据库字段
- android - PopMenu 项目空白