LINUX C# 加载本地库的范例代码

简介: LINUX C# 加载本地库的范例代码

网上搜索了一下,有人提供了办法,测试通过:

public partial class MainWindow : Gtk.Window
{
    public MainWindow() : base(Gtk.WindowType.Toplevel)
    {
        Build();
    }
    protected void OnDeleteEvent(object sender, DeleteEventArgs a)
    {
        Application.Quit();
        a.RetVal = true;
    }
    const string NATIVE_PATH = "./libtioplugininterface.so";
    const string NATIVE_INIT = "init";
    [DllImport("libdl.so")]
    protected static extern IntPtr dlopen(string filename, int flags);
    [DllImport("libdl.so")]
    protected static extern IntPtr dlsym(IntPtr handle, string symbol);
    [DllImport("libdl.so")]
    protected static extern IntPtr dlclose(IntPtr handle);
    const int RTLD_NOW = 2; // for dlopen's flags
    private delegate int native_init(int param);
    static bool NativeInit()
    {
        IntPtr hModule = dlopen(NATIVE_PATH, RTLD_NOW);
        if (hModule.Equals(IntPtr.Zero))
        {
            Console.WriteLine("LoadLibrary fail=" + NATIVE_PATH);
            return false;
        }
        Console.WriteLine("dlopen() OK");
        IntPtr address = dlsym(hModule, NATIVE_INIT);
        if (address == IntPtr.Zero)
        {
            Console.WriteLine("GetProcAddress fail=" + NATIVE_INIT);
            return false;
        }
        Console.WriteLine("dlsym() OK");
        Delegate proc = Marshal.GetDelegateForFunctionPointer(address, typeof(native_init));
        int result = ((native_init)proc)(0);
        Console.WriteLine("native_init() OK");
        dlclose(hModule);
        return true;
    }
    protected void OnButton2Pressed(object sender, EventArgs e)
    {
        this.button2.Visible = false;
        NativeInit();
    }
}
目录
相关文章
|
7月前
|
机器学习/深度学习 算法 定位技术
Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现裂缝的检测识别(C#代码UI界面版)
本项目基于YOLOv8模型与C#界面,结合Baumer工业相机,实现裂缝的高效检测识别。支持图像、视频及摄像头输入,具备高精度与实时性,适用于桥梁、路面、隧道等多种工业场景。
901 27
|
缓存 C# Windows
C#程序如何编译成Native代码
【10月更文挑战第15天】在C#中,可以通过.NET Native和第三方工具(如Ngen.exe)将程序编译成Native代码,以提升性能和启动速度。.NET Native适用于UWP应用,而Ngen.exe则通过预编译托管程序集为本地机器代码来加速启动。不过,这些方法也可能增加编译时间和部署复杂度。
824 2
|
存储 编译器 Linux
动态链接的魔法:Linux下动态链接库机制探讨
本文将深入探讨Linux系统中的动态链接库机制,这其中包括但不限于全局符号介入、延迟绑定以及地址无关代码等内容。
2236 141
|
8月前
|
Linux 编译器 vr&ar
Linux的动态库与静态库
静态库在编译时直接嵌入到最终的可执行文件中。
179 0
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
689 15
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
239 1
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
590 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
C#
C# 图形验证码实现登录校验代码
C# 图形验证码实现登录校验代码
373 2
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
3231 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
Linux Shell Python
9-7|salt代码在linux机子那个目录
9-7|salt代码在linux机子那个目录