gpt4 book ai didi

c - 将 C 库导入 Xamarin 控制台项目

转载 作者:行者123 更新时间:2023-11-30 17:13:35 24 4
gpt4 key购买 nike

所以我有一个最简单的项目。整个事情看起来像:

enter image description here

main.c

#include "main.h"
int testdejef(int i)
{
return i+1;
}

main.h

#ifndef __MAIN_H__
#define __MAIN_H__

int testdejef(int i);
#endif

程序.cs

using System;
using System.Runtime.InteropServices;


namespace TestCLib
{
class MainClass
{
[DllImport("libclibjef.a",EntryPoint="testdejef")]
private static extern int testdejef(int i);

public static void Main (string[] args)
{

Console.WriteLine (testdejef (1).ToString ());
}
}
}

根据网络上的各种 Xamarin 示例,这似乎大部分是正确的。但事实并非如此,现在编译会导致“System.DllNotFoundException”。请注意,编译不会出现问题,调试器会出现问题。

我读过这样的页面:http://developer.xamarin.com/guides/ios/advanced_topics/native_interop/

但文档似乎与 Android 或 iOS 代码相关,并且此问题似乎与控制台应用程序相关。有人知道将 C-Library 链接到项目的正确方法吗?

更新:这可能比预期更难。基于Mono documentation :

Note: Mono uses GLib to load libraries, and GLib has a bug on Mac OS Xwhere it doesn’t use a .dylib extension, but instead uses the Unix .soextension. While this should eventually be fixed, the currentworkaround is to write a .config file which maps to the .dylib file

据我所知,控制台应用程序没有 app.config 文件,因此我将 .so 编译为 .dylib,但目前我陷入了困境。单声道页面表示文件应该链接到库查找文件夹中。我确实将该文件夹添加到了所有建议的环境变量中,但这对我来说没有任何作用

最佳答案

这很简单,但你做得并不完全正确。问题是您需要一个动态库 (libclibjef.dylib),并在 DllImport 属性中使用它。

尚不清楚您正在构建动态库还是静态库(libclibjef.a - 请注意扩展名),但在 DllImport 中您引用了静态库。

正确的 DllImport 属性如下所示:

[DllImport ("libclibjef.dylib")]

然后还要确保可执行文件旁边有动态库。

如果仍有问题,您可以从终端运行程序,如下所示:

export MONO_LOG_LEVEL=debug
export MONO_LOG_MASK=dll
mono --debug yourapp.exe

您将获得调试输出,解释发生了什么。

关于c - 将 C 库导入 Xamarin 控制台项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30759170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com