亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

VLCJ - 在 64 位 Linux 上捆綁本機 VLC 庫

VLCJ - 在 64 位 Linux 上捆綁本機 VLC 庫

一只斗牛犬 2021-06-21 21:01:31
背景:我正在用 Java 編寫一個跨平臺的音頻播放器。在 Linux 上,我以 appimage ( https://appimage.org/ )的形式分發它。我使用 VLC/VLCJ 作為解碼引擎。appimages 的基本準則是在 appimage 中包含所有必需的庫,這些庫不能合理地預期默認包含在發行版中。這樣做是為了讓用戶不需要解決依賴項和/或與庫和程序之間的版本差異作斗爭。他們還建議針對少數 Linux 發行版的先前版本進行測試,以確認一切正常。Ubuntu 16.04 和 Fedora 27.16 默認不安裝 libvlc。我確信這對于許多其他發行版來說很常見。因此,我想在我的 appimage 中打包 libvlc 庫。問題:在 Linux 上,我無法讓 vlcj 識別/查找libvlc.so,libvlccore.so除非它們是通過發行版安裝的。設置:我通過我的發行版安裝了 VLC,我的程序運行并正常工作。我將libvlc.so、libvlccore.so和其他關聯庫從我的發行版中的默認位置復制到我的項目中的文件夾中。我將該文件夾添加到 Native Library Search 路徑(見下面的代碼)。我卸載了 VLC。我試圖運行我的程序。它因下面粘貼的錯誤而崩潰。注意:我在 Windows 上使用了相同的基本方法,它在那里完美運行。簡化代碼:String nativeVLCLibPath = Hypnos.getRootDirectory().resolve( "lib/nix/vlc/" ).toAbsolutePath().toString();System.out.println ( "Trying to look for libraries in: " + nativeVLCLibPath );NativeLibrary.addSearchPath( RuntimeUtil.getLibVlcLibraryName(), nativeVLCLibPath );
查看完整描述

3 回答

?
喵喔喔

TA貢獻1735條經驗 獲得超5個贊

我敢打賭本機 lib 的發行版版本是使用硬編碼路徑構建的,可能是絕對路徑。不幸的是,編寫庫需要這些的情況并不少見——它們通常作為標志傳遞到 ./configure 腳本或 makefile 或構建時的任何內容中。唯一的解決方法是自己構建庫,或在發行版庫的預期系統目錄中,在目標系統上安裝并行符號鏈接/硬鏈接,以指向您的庫?;蛘咴?chroot 下執行,但這是一個極端的選擇,對您來說可能不切實際。


查看完整回答
反對 回復 2021-06-30
?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

我可以看到使用 appimage 的吸引力,但我所做的是創建一個分發包(.deb 或其他),其中包含我的應用程序和 vlcj,并依賴于 LibVLC(和 jdk)。


查看完整回答
反對 回復 2021-06-30
?
回首憶惘然

TA貢獻1847條經驗 獲得超11個贊

我通過下載vlcappimage解決了這個問題,使用--appimage-extractcli 選項解壓縮它,去掉我不需要的東西,然后將它重新打包到我的 appimage 中。


查看完整回答
反對 回復 2021-06-30
  • 3 回答
  • 0 關注
  • 279 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號