.NET Core 中是否有相当于 DllImport 的 Linux 版本?

Daa*_*aan 9 c# c++ linux .net-core

我正在开发一个 .NET Core 项目。这应该可以毫无问题地在 Linux 上运行。但是,我需要调用一个用 C++ 创建的库。传统上,C# 开发人员使用DllImport&DllExport来完成此操作。

但是,我不想在生产环境中导入或导出 dll。在那里它需要在 Linux 上运行。Linux 上是否有相当于 DllImport/DllExport 的工具?在Linux上,使用so文件而不是dll文件。当涉及到低级别的事情时,我并不聪明,所以我寻找快速的解决方案和清晰的示例。像“SoImport”之类的东西?

Ren*_*kan 12

您也可以在 DllImport 中使用 .so 文件。

\n
[DllImport ("libc.so")]\nprivate static extern int getpid ();\n
Run Code Online (Sandbox Code Playgroud)\n

从 dlopen(3) 手册页中,按以下顺序搜索程序所需的必要共享库:

\n
    \n
  1. user\xe2\x80\x99s LD_LIBRARY_PATH环境变量中以冒号分隔的目录列表。这是允许 CLI 程序找到本机共享库的常用方法。
  2. \n
  3. 缓存在 /etc/ld.so.cache 中的库列表。/etc/ld.so.cache 是通过编辑 /etc/ld.so.conf 并运行 ldconfig(8) 创建的。编辑 /etc/ld.so.conf 是搜索其他目录的首选方法,而不是使用 LD_LIBRARY_PATH,因为这样更安全(将木马库放入 /etc/ld.so.conf 会更困难)。 so.cache 比将其插入 LD_LIBRARY_PATH 更好)。
  4. \n
  5. /lib,然后是 /usr/lib。
  6. \n
\n

更多详细信息可以在此处找到库处理

\n

编辑:

\n

libc.so如果包含任何未解析的符号,DllImport 将失败。请验证

\n
ldd -r -d libc.so\n
Run Code Online (Sandbox Code Playgroud)\n

并确保那里不存在未解析的符号。

\n