我正在尝试动态加载一个库(例如ArithmeticOprn.dylib)并调用该库中提供的方法。请参考下面的示例代码片段:
[DllImport("libdl.dylib")]
public static extern IntPtr dlopen(String fileName, int flags);
[DllImport("ArithmeticOprn.dylib")]
public static extern double Add(double a, double b);
static void Main(string[] args)
{
dlopen("path/to/ArithmeticOprn.dylib", 2);
double result = Add(1, 2);
}
在MacOS中运行上面的示例时,我遇到了以下异常:
但是,当我在DllImport中提供完整路径时,方法调用起作用,我可以获得预期的结果。供您参考,请参阅下面的代码片段。无法加载DLL“ArithmeticOprn.dylib”:找不到指定模块或其某个依赖项。
[DllImport("path/to/ArithmeticOprn.dylib")]
public static extern double Add(double a, double b);
请问我漏掉了什么?提前感谢:)
otool -L
命令(这是 OSX 上类似于 ldd 的命令),检查哪些依赖项没有找到以及为什么没有找到。可能是它们存在,但是针对不同的架构。 - CristiFati