swig + mono:找不到库的 C# 示例错误

2023-12-05

我在 Mac OS X 10.6.4 上使用 swig 2.0.1 + mono 2.6/2.8。

整体构建没问题,C# 示例的构建也没问题。问题是,当我运行示例(mono runme.exe)时,我总是收到以下错误。



Unhandled Exception: System.TypeInitializationException: An exception was thrown by the type initializer for examplePINVOKE ---> System.TypeInitializationException: An exception was thrown by the type initializer for SWIGExceptionHelper ---> System.DllNotFoundException: example
  at (wrapper managed-to-native) examplePINVOKE/SWIGExceptionHelper:SWIGRegisterExceptionCallbacks_example (examplePINVOKE/SWIGExceptionHelper/ExceptionDelegate,examplePINVOKE/SWIGExceptionHelper/ExceptionDelegate,examplePINVOKE/SWIGExceptionHelper/ExceptionDelegate,examplePINVOKE/SWIGExceptionHelper/ExceptionDelegate,examplePINVOKE/SWIGExceptionHelper/ExceptionDelegate,examplePINVOKE/SWIGExceptionHelper/ExceptionDelegate,examplePINVOKE/SWIGExceptionHelper/ExceptionDelegate,examplePINVOKE/SWIGExceptionHelper/ExceptionDelegate,examplePINVOKE/SWIGExceptionHelper/ExceptionDelegate,examplePINVOKE/SWIGExceptionHelper/ExceptionDelegate,examplePINVOKE/SWIGExceptionHelper/ExceptionDelegate)
  at examplePINVOKE+SWIGExceptionHelper..cctor () [0x00000] in :0 
  --- End of inner exception stack trace ---
  at examplePINVOKE..cctor () [0x00000] in :0 
  --- End of inner exception stack trace ---
  at example.gcd (Int32 x, Int32 y) [0x00000] in :0 
  at runme.Main () [0x00000] in :0 
  

看起来好像没有找到示例库,但生成的库是libexample.so。

这是生成libexample.so的库的源码

double Foo = 3.0;
int gcd(int x, int y) {
  ...
}

这是使用 libexample.so 的 C# 源代码。

using System;

public class runme
{
    static void Main() 
    {
        int x = 42;
        int y = 105;
        int g = example.gcd(x,y);
        ...
    }
}

这是使用 SWIG 生成的包装函数。

/* ----------------------------------------------------------------------------
 * This file was automatically generated by SWIG (http://www.swig.org).
 * Version 2.0.1
 *
 * Do not make changes to this file unless you know what you are doing--modify
 * the SWIG interface file instead.
 * ----------------------------------------------------------------------------- */
using System;
using System.Runtime.InteropServices;

public class example {
  public static int gcd(int x, int y) {
    int ret = examplePINVOKE.gcd(x, y);
    return ret;
  }

  public static double Foo {
    set {
      examplePINVOKE.Foo_set(value);
    } 
    get {
      double ret = examplePINVOKE.Foo_get();
      return ret;
    } 
  }
}

这是获取库和执行所需运行的命令。



gcc -c    example.c example_wrap.c 
cc -bundle -undefined suppress -flat_namespace  example.o  example_wrap.o   -o libexample.so
make -f ../../Makefile CSHARPSRCS='*.cs' CSHARPFLAGS='-nologo -out:runme.exe' csharp_compile
gmcs -nologo -out:runme.exe *.cs
  

可能出了什么问题?应该怎么做才能让 mono 了解 libexample.so?

ADDED

我可以使用“swig -csharp -dllimport“libexample.so”example.i”,但我得到了相同的结果。 我附上示例PINVOKE.cs.

正如本文中所写post,我运行了“MONO_LOG_LEVEL=debug mono runme.exe”。该消息表示即使文件存在,单声道也无法找到 ./libexample.so。



Mono: DllImport loading library: './libexample.so'.
Mono: DllImport error loading library '(null)'.
  

SOLUTION

我可以更改 swig/Examples 中的 Makefile 来解决这个问题。



CFLAGS     = -arch i386
  

这可能是由于库被编译为 64 位造成的。 “(null)”表示Mono无法获取此错误的错误消息。您可以通过设置适当的编译标志来解决此问题。例如:

./configure CFLAGS="-O -arch i386" CXXFLAGS="-O -arch i386" LDFLAGS="-arch i386" --disable-dependency-tracking

您也许还可以通过使用 Mono 的实验性 64 位支持来解决此问题,但我从未这样做过,所以不确定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

swig + mono:找不到库的 C# 示例错误 的相关文章

  • 如何获取正在访问 ASP.NET 应用程序的当前用户?

    为了获取系统中当前登录的用户 我使用以下代码 string opl System Security Principal WindowsIdentity GetCurrent Name ToString 我正在开发一个 ASP NET 应用程
  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况

随机推荐

  • 自 2013 年 2 月 6 日起,通过“feed”连接使用 Graph API 向朋友墙发帖失败

    我的应用程序开始无法在朋友的提要上发布项目 我收到此错误 Facebook request error The operation couldn t be completed facebookErrDomain error 10000 de
  • VBA 的日期无法在 Excel 2011 中运行?

    这是我的代码 我正在尝试 它可以在 PC 上运行 但不能在 Mac 上运行 运行此代码并创建一个 Excel 工作表 命名 添加一个选项卡 更改所述选项卡的颜色 更改所述选项卡 然后转置数据 同时保持单元格的格式以及单元格的宽度和高度到新工
  • “忘记密码”实施的最佳方法? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在寻找实现 忘记密码
  • 损坏的 GLSL 自旋锁/GLSL 锁概要

    我有一个设置 需要锁定 读取一些数据 处理 写入一些数据 然后解锁 为此 我制作了一个锁定纹理作为layout r32ui coherent uniform uimage2D 临界区的数据的声明方式类似 不幸的是 我对自旋锁的所有尝试都无法
  • 是否可以从设备 GPS 检索 GPRMC?

    我正在寻找一种从设备 GPS 获取 GPRMC 信息的方法 有可能以任何方式吗 没有公共 API 可从设备的 GPS 芯片检索 GPRMC 最接近的方法是根据 Location API 为您提供的内容构建 GPRMC 句子 以下代码在 Sw
  • Pipeline 上的 Sklearn GridSearchCV 用于测试多个变换和估计器

    我正在尝试使用 Pipeline 构建 GridSearchCV 并且我想测试变压器和估计器 有更简洁的方法吗 pipeline Pipeline imputer SimpleImputer scaler StandardScaler pc
  • 如何在 Kotlin 中获取随机数?

    一种通用方法 可以像 ruby 一样返回两个参数之间的随机整数rand 0 n 有什么建议吗 我的建议是扩大功能于IntRange创建这样的随机数 0 10 random TL DR Kotlin gt 1 3 一个适用于所有平台的随机数
  • 定义函数并从函数返回函数?

    如何在函数内定义并返回函数 例如 我们有一个类似的函数 float foo float val return val val 现在 需要的是像 bar 这样的函数 typedef float func t float Rubish pseu
  • 在 Prolog 中生成整数的最佳方法

    我想生成整数 并且正在寻找实现此目的的最佳方法 例子 number2 N N 0 N 1 N 2 and so on 现在我只是使用length 2 number2 N length N 但我认为应该有一些更好的方法 无需创建临时列表 我可
  • 根据前一行数据自动计算sql表中的列

    我使用 sql server 作为后端在 asp net c 中开发我的应用程序 现在我需要创建一个带有自动计算列 期末余额 的表 如下所示 Date in stock out stock closing balance 2 3 2013
  • Python 编码风格中的空格

    Python 教程说 在运算符周围和逗号之后使用空格 但不要直接在括号结构内使用空格 a f 1 2 g 3 4 不直接在括号结构内 到底是什么意思 这大概来自于PEP 8 Python 代码风格指南 具体请参阅 表达式和语句中的空格 部分
  • 如何找到元组列表中每个相似条目的平均值?

    我有这个元组列表 Jem 10 Sam 10 Sam 2 Jem 9 Jem 10 如何求每个名字加上的数字的平均值 即用 Jem 存储在一个元组中的所有数字的平均值 然后输出它们 在此示例中 输出将是 Jem 9 66666666667
  • 500 无证错误:在 FastAPI 中返回响应时出现内部服务器错误

    我正在使用 FastAPI 通过 ML 模型进行预测 当我给一个task id and input 应用程序应将其添加到后台任务并相应地返回响应 然而 我得到Error 500当我尝试这样做时 添加后task id globally 它在正
  • 如何处理 URISyntaxException

    我收到此错误消息 java net URISyntaxException Illegal character in query at index 31 http finance yahoo com q h s IXIC My Url htt
  • 通过公式从单元格中提取所需数据

    我一直在使用下面的公式从单元格中提取所需的结果 但现在我试图从单元格中获取更多数据 并且我最终尝试从单元格中获取更多值 但它不起作用 我附上了一张谷歌表格 其中提供了数据和所需的结果以及我的公式 任何帮助将不胜感激 ArrayFormula
  • 在下拉选择中,如何从数据库填写完整的表单字段

    如何根据从下拉列表中选择的值从数据库填写完整的表单输入字段 示例 在应用程序中 通过选择客户名称 它会使用数据库中存储的详细信息填充完整的表单输入字段 Sample Code
  • 在 matlab 中以一般形式绘制二次曲面

    I have Quadric Surface equation 我知道A B C 如何在 matlab 中绘制方程 最好的选择是生成函数的 3D 等高线图 其中函数值为 0 处具有单个等高线 要以合理的精度完成此操作 请在多个点 x y z
  • 让控制台等待用户输入关闭

    我有一个控制台应用程序 在执行其任务后 必须向用户提供反馈 例如 操作完成 或 操作失败 以及详细的错误 问题是 如果我只是 让它运行 输出消息将被打印 但控制台将很快关闭 没有时间阅读消息 据我记得 在 C 中 每个控制台应用程序都会以
  • 使用 php/mysql 在 googlemaps 上动态绘制折线

    我是 google 地图 API 的新手 我为我的手机编写了一个小应用程序 可以定期将其位置更新到 SQL 数据库 我想在我的浏览器中的谷歌地图上显示此信息 理想情况下 我想定期轮询数据库 如果有任何新的坐标到达 请将它们添加到行中 描述它
  • swig + mono:找不到库的 C# 示例错误

    我在 Mac OS X 10 6 4 上使用 swig 2 0 1 mono 2 6 2 8 整体构建没问题 C 示例的构建也没问题 问题是 当我运行示例 mono runme exe 时 我总是收到以下错误 Unhandled Excep