【问题标题】:Can C# for Linux [Centos8] call other languagesC# for Linux [Centos8] 可以调用其他语言吗
【发布时间】:2021-04-11 00:21:34
【问题描述】:

我了解 C# 可用于 Linux,特别是 Centos8: https://docs.microsoft.com/en-us/dotnet/core/install/linux-centos 但是用 C# 为 Linux/Centos8 开发的应用程序可以调用为其他语言(例如 C++ 或 C)编译的库吗?

【问题讨论】:

  • "为其他语言编译的库" -- 库(或执行)不是为语言编译的。它们是用某种编程语言编写的,然后针对某些 CPU 或解释器/运行时架构进行编译。所以你的问题很混乱。
  • 由 Visual Studio 从 C++ 源代码编译的 Windows DLL 不能由 C# 应用程序直接访问。必须在 DLL 上使用 Windows 实用程序 AXIMP.EXE 以生成 C# 和 C++ DLL 之间的桥接接口。从 C++ 编译的 Linux 库是否可以由 C# for Linux 直接调用?如果没有,Linux 是否存在与 AXIMP.EXE 等效的东西来桥接 C# 和 C++?
  • 您可以使用 P/Invoke 从 C# 调用 C API 中的函数。参见例如这个article
  • 这能回答你的问题吗? P-Invoke in .net core with Linux

标签: c# linux


【解决方案1】:

如果您正在寻找编写 c/c++ 函数并调用它们,您可以尝试 unsafe 块。您还可以使用 Process api 运行任何其他可执行文件以获得结果。这是其他人没有提到的两个选项。

【讨论】:

  • 其实我的任务是反过来的。 C++ 程序通常使用由 C++ 编写和编译的现有库。我们还希望允许 C# 程序调用现有的库。由于 C# 是解释性的,而 C++ 是编译/机器代码,我的理解是前者不能直接调用后者,但需要一些额外的层。到目前为止,我为了解可能发生的事情所做的努力已经赢得了“您的问题令人困惑”和对问题本身的反对意见。尽管如此,我仍然需要了解Linux下的C#是否可以调用Linux下用C++编写的库。
  • “因为 C# 是解释性的”——当然不是。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-18
  • 1970-01-01
  • 1970-01-01
  • 2020-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多