C#.Net库无法在Linux上找到依赖项

时间:2018-03-22 12:27:52

标签: c# linux mono sfml sfml.net

我遇到与我的SFML.Net项目链接的依赖项问题: 我成功导入了SFML.Net DLL,因此程序编译没有问题。但是一旦我运行它,它崩溃了,告诉以下内容:

var accessToken = HttpContext.GetTokenAsync("access_token");

我在Ubuntu Linux上使用Mono编译器和Monodevelop IDE,所以我使用的是dll映射,它有效(.Net DLL确实为csfml库寻找正确的路径)

权限已全部设置

System.DllNotFoundException: /usr/local/lib/libcsfml-graphics.so
  at (wrapper managed-to-native) SFML.Graphics.RenderWindow:sfRenderWindow_createUnicode (SFML.Window.VideoMode,intptr,SFML.Window.Styles,SFML.Window.ContextSettings&)
  at SFML.Graphics.RenderWindow..ctor (VideoMode mode, System.String title, Styles style, ContextSettings settings) [0x00043] in <filename unknown>:0 
  at SFML.Graphics.RenderWindow..ctor (VideoMode mode, System.String title) [0x0000b] in <filename unknown>:0 
  at SFML_Test.Game.Display () [0x00010] in <filename unknown>:0 
  at SFML_Test.Program.Main (System.String[] args) [0x00010] in <filename unknown>:0 

代码很少:

Program.cs的

alex@alexpc:/usr/local/lib$ ls -l
total 960
-rwxr-xr-x 1 alex alex   55833 Mar 22 07:35 libcsfml-audio.so.2.2
-rwxr-xr-x 1 alex alex   55833 Mar 22 07:35 libcsfml-audio.so.2.2.0
-rwxr-xr-x 1 alex alex  166721 Mar 22 07:35 libcsfml-graphics.so
-rwxr-xr-x 1 alex alex  166721 Mar 22 07:35 libcsfml-graphics.so.2.2
-rwxr-xr-x 1 alex alex  166721 Mar 22 07:35 libcsfml-graphics.so.2.2.0
-rwxr-xr-x 1 alex alex   69291 Mar 22 07:35 libcsfml-network.so
-rwxr-xr-x 1 alex alex   69291 Mar 22 07:35 libcsfml-network.so.2.2
-rwxr-xr-x 1 alex alex   69291 Mar 22 07:35 libcsfml-network.so.2.2.0
-rwxr-xr-x 1 alex alex   15287 Mar 22 07:35 libcsfml-system.so
-rwxr-xr-x 1 alex alex   15287 Mar 22 07:35 libcsfml-system.so.2.2
-rwxr-xr-x 1 alex alex   15287 Mar 22 07:35 libcsfml-system.so.2.2.0
-rwxr-xr-x 1 alex alex   32179 Mar 22 07:35 libcsfml-window.so
-rwxr-xr-x 1 alex alex   32179 Mar 22 07:35 libcsfml-window.so.2.2
-rwxr-xr-x 1 alex alex   32179 Mar 22 07:35 libcsfml-window.so.2.2.0

Game.cs

using System;

namespace SFML_Test
{
    public class Program 
    {
        public static void Main (string[] args)
        {
            Console.WriteLine("Starting window");
            Game game = new Game ();
            try
            {
                game.Display ();
            }
            catch (Exception e) {

                Console.WriteLine (e.ToString());
            }
        }
    }
}

我只是不明白为什么.Net dll找不到csfml linux库,即使它清楚地查看正确的目录并且应该没有问题地找到它们。

当然我也尝试从映射中删除路径,这样程序会查看可执行文件的文件夹,但无济于事

任何人都知道为什么会出现这个问题? .Net DLL是否在其他文件夹中搜索(例如/some/library/folder/usr/local/lib/libcs​​fml-graphics.so)?这可以解释为什么文件没有找到。

我有点绝望,所以如果有人知道的话,竖起大拇指的任何答案!

亚历

tl; dr:Mono编译器/ Linux,.Net DLL无法找到另一个依赖项,即使它在正确的文件夹中搜索

1 个答案:

答案 0 :(得分:0)

哦,小伙子,有很多话要说

所以问题是C绑定需要C ++ sfml库,而它无法找到它。我试图移动文件使libs与我的可执行文件在同一个文件夹中,当然这就是windows的方式。事实证明在Linux中,常规是使用库缓存来查找所述文件。所以我使用ld.so.conf文件缓存了sfml库,这一切都解决了

感谢Evk的线索