দেবিয়ানে জাভা চালু করতে সমস্যা: "ভাগ করা লাইব্রেরি লোড করার সময় ত্রুটি: libjli.so"


16

আমি জাভা চালু করার চেষ্টা করছি:

$ java -version
java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory

$ ldd /usr/lib/jvm/java-6-openjdk/jre/bin/java
        linux-gate.so.1 =>  (0xb779f000)
        libz.so.1 => /usr/lib/libz.so.1 (0xb7780000)
        libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb7767000)
        libjli.so => /usr/lib/jvm/java-6-openjdk/jre/bin/../lib/i386/jli/libjli.so (0xb7762000)
        libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb775e000)
        libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7603000)
        /lib/ld-linux.so.2 (0xb77a0000
$ ls /usr/lib/jvm/java-6-openjdk/jre/bin/../lib/i386/jli/
libjli.so

তবে জাভা মূলের নীচে কাজ করে:

$ sudo java -version
java version "1.6.0_18"
OpenJDK Runtime Environment (IcedTea6 1.8.7) (6b18-1.8.7-2~lenny1)
OpenJDK Client VM (build 14.0-b16, mixed mode, sharing)

UPD:

/ usr / lib / jvm / java-6-openjdk / jre / bin / java আসলে আমার জাভা আদেশ:

$ type java
java is hashed (/usr/bin/java)
$ ls -l /usr/bin/java
lrwxrwxrwx 1 root root 22 Jul 14 10:15 /usr/bin/java -> /etc/alternatives/java
$ ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 40 Jul 14 10:36 /etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk/jre/bin/java

UPD2:

আমি রুট PATH সেট করার চেষ্টা করেছি:

$ sudo su
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# exit
$ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
$ java -version
java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory

UPD3:

আমি ক্লান্ত:

# comm -3 <(declare | sort) <(declare -f | sort)

মূলের অধীনে তবে জাভা জন্য কোনও ব্যবহারযোগ্য পরিবেশের পরিবর্তনশীল নেই।

UPD4:

strace -f java -versionফলাফল: http://dumpz.org/67368/


চালান strace -f java -versionএবং আউটপুট পোস্ট করুন।
গিলস 'অশুভ হওয়া বন্ধ করুন'

উত্তর:


12
open("$ORIGIN/../lib/i386/jli/tls/i686/sse2/cmov/libz.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)

আপনি যে এক্সিকিউটেবল চালাচ্ছেন তা সাধারণ লাইব্রেরির অনুসন্ধানের পথ ছাড়াও আরপ্যাথে লাইব্রেরিগুলির সন্ধান করে। এখানে আরপথটি $ORIGIN/../lib/i386/jli:$ORIGIN/../jre/lib/i386/jli। সাধারণত $ORIGINএখানে সম্পাদনযোগ্য এর স্থান দ্বারা প্রতিস্থাপন করা উচিত /usr/lib/jvm/java-6-openjdk/jre/bin

এখানে, $ORIGINপ্রতিস্থাপন করা হচ্ছে না। অতিরিক্ত সুবিধাগুলি (সেটুইড, সেটগিড, বা সেটপক্যাপ) দিয়ে চালানো এক্সিকিউটেবলগুলিতে বৈশিষ্ট্যটি বন্ধ করা আছে, অন্যথায় আপনি অন্য একটি লাইব্রেরি ইনজেক্ট করতে সক্ষম হতে পারেন এবং তাই উন্নততর সুবিধাগুলি সহ স্বেচ্ছাসেবক কোড চালাতে পারেন। ( আরও বিশদ ব্যাখ্যার জন্য এই নিবন্ধটি দেখুন )) সুরক্ষা ইস্যুটি তুলনামূলকভাবে সম্প্রতি আবিষ্কার করা হয়েছিল; ডেবিয়ান এটা সংশোধন করা হয়েছে জেলাকে-2122-1 তাই আগে আপনি আপগ্রেড, libc6-2.7-18lenny6আপনার javaএক্সিকিউটেবল সম্ভবতঃ কাজ করে।

উপসর্গটি নির্দেশ করে যে javaঅতিরিক্ত সুযোগ-সুবিধা নিয়ে চলছে। এটি একটি সাধারণ ডেবিয়ান ইনস্টলেশন ক্ষেত্রে হয় না। নিশ্চিত হয়ে নিন যে /usr/lib/jvm/java-6-openjdk/jre/bin/javaএটি মোড 755 এবং এর কোনও ক্ষমতা নেই ( getcap /usr/lib/jvm/java-6-openjdk/jre/bin/javaএবং setcap -r …যদি সক্ষমতা সরিয়ে ফেলতে হয়)।


(আসল উত্তর, এটি কার্যকর হতে পারে যদি আপনি দেখতে পান যে এটি javaরুট হিসাবে কাজ করে তবে অন্যান্য ব্যবহারকারীর মতো নয়, এবং এটি প্রমাণিত হয় যে আপনি বিভিন্ন বাইনারি গ্রহণ করছেন))

আমার বাজিটি হ'ল javaএটির আগে আপনার আরও কিছু সংস্করণ রয়েছে PATH( sudoপরিবর্তনগুলি PATH)। যা type javaবলেছে তা পরীক্ষা করুন - এটি সম্ভবত কিছু আলাদা জাভা সংস্করণ যার জন্য ldd /path/to/bin/javaপ্রতিবেদন করেছে libjli.so => not found

এবং আমি অনুমান করি যে এই জাভা সংস্করণটি খুঁজে না পাওয়ার libjli.soকারণটি এটি এটি একটি rpath (এক্সিকিউটেবলের মধ্যে সঞ্চিত গ্রন্থাগার অনুসন্ধানের পথ) এর মাধ্যমে এটি অনুসন্ধান করছে যা এটি ইনস্টল করার সাথে মেলে না। আপনার যদি javaবাইনারি থাকে /some/where/bin/java, এবং এটিতে একটি আপেক্ষিক আরপথ থাকে (যা সান জেডিকে এবং ওপেনজেডিকের পথ), গ্রন্থাগারটি থাকা উচিত /some/where/lib/i386/jli/libjli.so(একটি i386 আর্কিটেকচার ধরে ধরে)। আরপিথটি যদি নিখুঁত হয় তবে আপনাকে অবশ্যই libjli.soনির্দিষ্ট নির্দিষ্ট জায়গায় toোকাতে হবে বা LD_LIBRARY_PATHকোথায় রয়েছে তা অন্তর্ভুক্ত করতে সেট করতে libjli.soহবে।


আমি মূলত পোস্টটি আপডেট করেছি - এলডিডি / পাথ / টু / বিন / জাভা আসলেtype java
আতাউর

আমি রুট PATH সেট করার চেষ্টা করেছি এবং export LD_LIBRARY_PATH=/usr/lib/jvm/java-6-openjdk/jre/lib/i386/jli/, কিন্তু একই ত্রুটি পেয়েছি।
আইতাউর

ঠিক আছে, আমি আমার বাজি হারিয়েছি। দেখে মনে হচ্ছে আপনার জাভা এক্সিকিউটেবলের অতিরিক্ত সুবিধা রয়েছে, যা বিজোড় od
গিলস 'অশুভ হওয়া বন্ধ করুন' 19

4

আমি java.com থেকে "1.7.0_60" .tar.gzফর্ম্যাটে ডাউনলোড করেছি এবং এটিতে ইনস্টল করেছি /usr/local/jre1.7.0_60। তারপরে আমি একটি হার্ড লিঙ্ক তৈরি করেছি /usr/local/bin/javaএবং উপরে বর্ণিত ত্রুটিটি পেয়েছি।

হার্ডলিঙ্কটি একটি প্রতীকী লিঙ্কে পরিবর্তন করা সমস্যার সমাধান করেছে।

সংক্ষিপ্ত সংস্করণ:

$ sudo ln /usr/local/jre1.7.0_60/bin/java /usr/local/bin/java

খারাপ.

$ sudo ln -s /usr/local/jre1.7.0_60/bin/java /usr/local/bin/java

ভাল.


2

একই পথের ভিতরে জাভা কার্যকর করতে চেষ্টা করুন find libjli.so ব্যবহার করুন।

যেমন আমি দেখেছি libjli.soমধ্যে /usr/lib/jvm/java-7-oracle/jre/lib/amd64/jli/libjli.so, তাই আমি ব্যবহার

find /usr/lib/jvm/java-7-oracle/ -name "java"

এবং এক্সিকিউটেবল খুঁজে পেয়েছি /usr/lib/jvm/java-7-oracle/bin/java। তারপরে, আমি javaএখান থেকে মুছে ফেলেছি /usr/binএবং উপরের এক্সিকিউটেবলের উপরে সিমলিংক করেছি /usr/bin


2

যদি জাভা এক্সিকিউটেবলে সেটক্যাপ ব্যবহারের কারণে বাগ হয়, তবে উল্লেখ করুন

সেটেল্যাপ ক্যাপ_নেট_বাইন্ড_সার্ভিস + এপি এবং http://bugs.java.com/view_bug.do?bug_id=7157699 এর সাথে কাজ করতে কীভাবে ওরাকল জাভা 7 পাবেন?

যা বিশদ এই প্রশ্নের উত্তর।

পুনশ্চ. আমাদের প্রকল্পে আমাদের করতে হয়েছিল

sudo setcap cap_net_bind_service=+ep /path/to/java

জাভা বাইনারি 1024 এর নীচে tcp / udp পোর্ট খোলার অনুমতি দেয়। জাভা উপরে "বাগ" 7157699 ডিরেক্টরি সমাধানের মাধ্যমে দ্রুত সমাধান সরবরাহ করে যেখানে libjli.so /etc/ld.so.conf.d পাথের একটি কনফ ফাইলের মধ্যে অবস্থিত এবং তারপরে পুনরায় ক্যাশে লাইব্রেরিতে ldconfig কল করা। ধরে নিচ্ছি লিনাক্স।


0

এই ফাইলটিতে অনুমতিগুলি পরীক্ষা করুন। তারা দেখতে হবে 0644/-rw-r--r--। যদি তা না হয় তবে পুনরায় ইনস্টল করুন openjdk-6-jre-headlessকারণ এর অর্থ হ'ল কেউ অনুমতি নিয়ে গন্ডগোল করেছে।


1
lddlibjli.so => not foundএটি পড়তে না পারলে প্রতিবেদন করবে .so(GLibc 2.11 এর সাথে কমপক্ষে এটি ঘটে)।
গিলস 10'10

0

শেপাপাংয়ের উত্তরের মতো, আমি libjli.soলাইব্রেরি অনুসন্ধানের পথে জোর করেছিলাম :

# সন্ধান করুন / usr / lib / jvm -name-libjli.so
/usr/lib/jvm/java-6-sun-1.6.0.45/jre/lib/amd64/jli/libjli.so

# রফতানি এলডি_লিবারি_প্যাথ = / ইউএসআর / লিবিব / জেভিএম / জাভা -6-সূর্য / জেআর / লিবিব / এএমডি 64 / জিলি: D এলডি_লিবারি_প্যাথ


রেফারেন্সের জন্য, আমার বিল্ড এনভায়রনমেন্টটি গিথুব ব্যবহার করে: উবুন্টু 10.04 / 64-বিটে ফ্লেকিশনডোটর্প / ওব-জাভা 6।


0

কিছু অদ্ভুত কারণে /usr/bin/javaজাভা ইনস্টলেশনটির দিকে আর নির্দেশ করা হয়নি। কীভাবে ঘটেছিল তা ধারণা নেই। আমি এটি চালিয়ে নিশ্চিত করেছি:

$ sudo update-alternatives --config java

যা আমাকে নিম্নলিখিতটি দিয়েছিল

There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java
Nothing to configure.
update-alternatives: warning: forcing reinstallation of alternative /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java because link group java is broken
update-alternatives: warning: not replacing /usr/bin/java with a link

সুতরাং সমাধানটি ছিল জাভাটি সরিয়ে /usr/local/binনতুন একটি সিমিলিংক তৈরি করা:

$ sudo rm -rf /usr/bin/java
$ sudo ln -s /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java /usr/bin/java

0

আমারও ত্রুটি ছিল

এটির সমাধানের সহজতম উপায় হ'ল সমস্ত জেডিএস এবং জেরগুলি এবং এক্সিকিউটেবল / ইউএসআর / বিন / জাভা যদি সেখানে থাকে তবে সরিয়ে ফেলা।

এবং তারপরে jdk পুনরায় ইনস্টল করুন।

এটি আমার জন্য সমস্যার সমাধান করেছে। অন্য পদ্ধতি না।


0

যে কোনও সিস্টেমড সার্ভিস থেকে জাভা অ্যাপ্লিকেশন শুরু করার চেষ্টা করছে এবং একই সম্পর্কিত ত্রুটিটি পাওয়ার সাথে সম্পর্কিত libjli.so লাইব্রেরির পড়ুন।

ফেডোরার জন্য বর্তমানে এটির জন্য একটি খোলা বাগ রয়েছে:

বাগ 1358476 - জেল-ভিত্তিক পরিষেবাদি সম্পাদন করা থেকে সিস্টেমডকে আটকাচ্ছে সেলইনাক্স

এর ফলাফল হ'ল SELinux নীরবে সেই লাইব্রেরিতে অ্যাক্সেসকে সীমাবদ্ধ করে চলেছে । কোনও AVC অস্বীকৃত বার্তা না থাকায় আপনি এটিকে প্রসঙ্গ বা নীতি পরিবর্তনের সাথে ঠিক করতে পারবেন না।

আমি খুঁজে পেয়েছি যে /etc/ld.so.conf.d/আপনার libjli.soফাইলের ফোল্ডার যুক্ত এমন একটি ফাইল যুক্ত করা একটি কাজ ar

/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-5.b14.fc26.x86_64/jre/lib/amd64/jli/

এবং তারপর চালান

ldconfig

তবে এটি বেশ অগোছালো ...

/bin/bash -cআপনার পরিষেবা ফাইলে জাভা প্রক্রিয়া চালু করার জন্য আরও ভাল বিকল্পটি ব্যবহার করা উচিত:

ExecStart=/bin/bash -c "/usr/bin/java -Xmx1024m -jar myApp.jar NONINTERACTIVE"

সমস্যা সমাধান না হওয়া পর্যন্ত ...


এটা কি আছে /bin/bash? আপনি যদি ব্যবহার করেন তবে কী হবে /bin/sh?
জি-ম্যান বলছেন 'পুনরায় ইনস্টল করুন মনিকা'

@ জি-ম্যান আপনি / বিন / শ দিয়ে চেষ্টা করে দেখেছেন? আমি অনুমান করব যে এটি কাজ করবে তবে আপনাকে চেষ্টা করতে হবে। আপনি এটি কীভাবে যাবেন তা দয়া করে আপডেট করুন। ধন্যবাদ
কমফাইটোডে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.