[英]C# .Net library cannot find dependencies on Linux
我在與依賴項鏈接到我的SFML.Net項目時遇到問題:我成功導入了SFML.Net DLL,因此程序編譯沒有問題。 但是一旦我運行它,它就會崩潰,並告訴以下內容:
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
我在Ubuntu Linux上使用Mono編譯器和Monodevelop IDE,所以我使用了dll映射,該映射有效(.Net DLL確實為csfml庫尋找正確的路徑)
權限均已設置
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
代碼是最少的:
Program.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());
}
}
}
}
Game.cs
using System;
using SFML;
using SFML.Window;
using SFML.Graphics;
using SFML.System;
namespace SFML_Test
{
class Game
{
private RenderWindow _window;
public void Display ()
{
_window = new RenderWindow(new VideoMode(800, 600), "SFML window");
_window.SetVisible(true);
_window.Closed += new EventHandler(OnClosed);
while (_window.IsOpen)
{
_window.DispatchEvents();
_window.Clear(Color.Red);
_window.Display();
}
}
private void OnClosed(object sender, EventArgs e)
{
_window.Close();
}
}
}
我只是不明白為什么.Net dll無法找到csfml linux庫,即使它清楚地位於正確的目錄下也應該沒有問題地找到它們。
當然,我也嘗試從映射中刪除路徑,以便程序可以查看可執行文件的文件夾,但無濟於事
有人知道為什么會出現這個問題嗎? .NET DLL是否在其他文件夾中搜索(例如/some/library/folder/usr/local/lib/libcsfml-graphics.so)? 這將解釋為什么找不到純文件。
在這一點上,我有點絕望,所以如果有人知道,豎起大拇指尋求任何答案!
亞歷克斯
tl; dr:Mono編譯器/Linux、.Net DLL即使在正確的文件夾中搜索也找不到其他依賴項
哦,男孩,有太多話要說
因此,問題在於C綁定需要C ++ sfml庫,但找不到它。 我試圖四處移動文件以使這些庫與我的可執行文件位於同一文件夾中,當然這是Windows的處理方法。 事實證明,在Linux中,規范是使用庫緩存來查找所述文件。 因此,我使用ld.so.conf文件緩存了sfml庫,並且全部解決了
感謝Evk提供的線索
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.