Không tải được libGL.so trên Android


82

Tôi đang sử dụng Ubuntu 12.04 (Precise Pangolin) với Oracle JDK 7 và khi tôi đang chạy trình giả lập Android từ Eclipse , nó gây ra lỗi này:

[2012-07-04 02:52:10 - Emulator] error libGL.so: cannot open shared object file: No such file or directory 
[2012-07-04 02:52:10 - Emulator] Failed to load libGL.so

Ngoài ra trình giả lập rất chậm. Làm thế nào tôi có thể giải quyết vấn đề này?

Câu trả lời:


82

Tôi đã cài đặt SDK Android vào ~ / android-sdk-linux_x86, vì vậy tôi đã làm:

ln -s /usr/lib/libGL.so.1 ~/android-sdk-linux_x86/tools/lib/libGL.so

Điều này giải quyết các lỗi giống như liên kết đến / usr / lib, nhưng nó không yêu cầu root và không gây rối với các thư mục hệ thống lõi.


5
Điều này kết hợp với lệnh "apt-get" của libo là giải pháp rõ ràng nhất ở đây.
Dave Cameron

Nếu bạn chưa có libGL.so.1, bạn có thể cần sử dụng giải pháp bằng libo, nhưng đây là nơi sạch nhất để liên kết tệp. Không cần đặt 32 bit trong 64 bit libs ....
Ajax

23
locate libGLLúc đầu có thể giúp
nhân dân tệ

2
Tôi đã sử dụng find / -name 'libGL.so.1'và định vị nó /usr/lib/x86_64-linux-gnutrên debian jessie.
Justin Skiles

35

Trên Ubuntu 12.04 64-bit, hãy làm như sau:

$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
  zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
  libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
  libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos \
  python-markdown libxml2-utils xsltproc zlib1g-dev:i386
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

Nguồn: Cài đặt các gói bắt buộc (Ubuntu 12.04)


2
điều này làm hỏng hệ thống của tôi
Alexandros

Câu trả lời này kết hợp với câu trả lời - askubuntu.com/a/144194 để giải quyết phần phụ thuộc (sử dụng aptitude để xác định phần phụ thuộc và xem điều gì đang gây ra sự cố) và cuối cùng chạy một lệnh sudo apt-get install --reinstall gcc-4.7-multilibnhư tôi đã tìm thấy trên answer askubuntu.com/a/236114
Aleks

Tôi đã phải làm "sudo apt-get install libglapi-mesa" và sau đó "sudo apt-get install libx11-dev: i386 libreadline6-dev: i386 libgl1-mesa-glx: i386" đầu tiên
stackOverlord

Tôi nghĩ rằng tôi không phải cài đặt libGL cho x86, nó là đủ để sử dụng ./sdk/tools/emulator64-x86? (lưu ý '64')
jcarballo

1
Ôi trời, đăng những dòng cài đặt ứng dụng khổng lồ mà không có bất kỳ hình thức giải thích hay cảnh báo nào là không tốt.
Sebastian Mach

32

Tôi đang sử dụng Ubuntu 12.04 64-bit. Sử dụng lệnh sau để giải quyết vấn đề

 sudo ln -s /usr/lib32/fglrx/libGL.so.1.2 /usr/lib/libGL.so

Lưu ý : Điều này chỉ áp dụng cho những người sử dụng trình điều khiển đồ họa AMD / ATI.


1
Điều này cũng làm việc cho tôi, tôi nghĩ rằng điều này chỉ hoạt động cho thẻ ATI. Điều này sai về mặt kỹ thuật vì nó liên kết thư viện được chia sẻ 32 bit vào thư mục (64 bit) / lib /, nhưng có vẻ như trình giả lập Android sẽ chỉ tìm kiếm ở đó cho lib này.
Alex Pretzlav

3
Tôi khuyên bạn nên thực hiện tìm kiếm tệp cho libGL.so và điều chỉnh lệnh liên kết dựa trên vị trí. Mine tình cờ có mặt tại địa chỉ: / usr / lib / i386-linux-gnu / mesa
bytebender

2
Của tôi ở /usr/lib/x86_64-linux-gnu/mesa/libGL.so nhưng nó gây ra lỗi nếu tôi cố chạy vì nó muốn lib 32 bit và tôi đã cung cấp lib 64 bit
Ben McCann

32

Đối với Ubuntu 12.04 LTS 32-bit, điều này đã hoạt động:

sudo apt-get install libgl1-mesa-dev

Không có cách nào sau đây hoạt động:

cd /usr/lib/i386-linux-gnu/mesa/
sudo ln -s libGL.so.1.2 libGL.so 
sudo ln -s libGL.so.1.2 /usr/lib/libGL.so
ln -s libGL.so.1.2 ~/android/android-sdk-linux/tools/lib/libGL.so

1
điều tương tự cũng xảy ra vào 12 giờ 10
logcat

Cùng vào đây để Linux Mint
Sephy

Hoạt động với 13.04. Lưu ý rằng nếu bạn đặt một liên kết tượng trưng trong thư mục tools / lib, bạn phải xóa nó một lần nữa.
Perseids

2
Lệnh apt-get cũng hoạt động trên Ubuntu 13.04 x64, không cần liên kết biểu tượng.
Jason McVetta

14

Những gì phù hợp với tôi (ubuntu 12.04 64bit) chỉ để chạy:

    sudo apt-get install libgl1-mesa-dev

Tôi thấy rằng nó libGL.sotồn tại trong thư mục/usr/lib/x86_64-linux-gnu/

Cài đặt phiên bản 32 bit không hoạt động.


6

Trên Ubuntu 12.04 64 bit, không có / usr / lib64. Nó chỉ là / usr / lib. Ngoài ra, trên máy của tôi, libGL.so không có. Thay vào đó, tệp là libGLEW.so

Để cài đặt /usr/lib/LibGL.so bạn có thể chạy: sudo apt-get install libgl1-mesa-dev

Tuy nhiên, nó không giải quyết được vấn đề cho tôi. Trên thực tế, nó có thể đã làm hỏng hệ thống của tôi.


Được kiểm tra bằng Synaptic, libgl1-mesa-dev cài đặt libGL.so thành /usr/lib/x86_64-linux-gnu/libGL.so
sergio91pt

1
GLEW là một thư viện khác, OpenGL Extension Wrangler . Nó không phải là "thay thế", nó là thứ mà các chương trình có thể sử dụng ngoài libGL.
Wyzard

4

Điều này đã làm việc cho tôi trên Ubuntu 12.10 64 bit và gói ADT:

ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 ~/adt-bundle-linux-x86_64/sdk/tools/lib/libGL.so

Nếu bạn không có /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1chỉ cần cài đặtlibgl1-mesa-glx

sudo apt-get install libgl1-mesa-glx

4

Tôi nghĩ rằng tôi đã làm đúng, không có cảnh báo và không chạy chậm ... Tuy nhiên, điều này có thể không hoạt động với trình điều khiển độc quyền.

Đảm bảo rằng libgl1-mesa-glx: i386 đã được cài đặt (ngay cả khi bạn có tệp x64 SO). Sau đó làm:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2 /usr/lib/libGL.so

3

NVidia Optimus:

Chạy trên đồ họa kép (intel và nvidia), tôi đã sử dụng như sau:

  1. Cài đặt Bumblebee (xem: https://wiki.ubuntu.com/Bumblebee#Installation )
  2. Cài đặt lib cần thiết.
  3. Chạy trình giả lập trên thẻ rời nvidia.

Cái này cần phải dùng mẹo:

sudo add-apt-repository ppa:bumblebee/stable
sudo add-apt-repository ppa:ubuntu-x-swat/x-updates
sudo apt-get update 
sudo apt-get install bumblebee bumblebee-nvidia linux-headers-generic 
sudo apt-get install ia32-libs

Bất cứ khi nào bạn muốn chạy trình giả lập, chỉ cần sử dụng optirun:

optirun emulator @<avd_name>

Tôi nên đưa ra cảnh báo rằng tôi chỉ mới cài đặt Linux ngày hôm qua. Vì vậy, tôi thực sự không biết mình đang làm gì….



3

Tôi sử dụng Linux Mint 14 - 64 bit và đối với tôi, nó đã hoạt động :):

sudo apt-get install libgl1-mesa-glx libgl1-mesa-dev

2

Trên Ubuntu 12.04 64-bit, GNOME 3.4, lần đầu tiên tôi tham khảo http://developer.android.com/sdk/installing/index.html và cài đặt ia32-lib, sẽ tạo / usr / lib / i386-linux-gnu /mesa/libGL.so.1.2.0

Sau đó, tôi chạy lệnh dưới đây và giải quyết vấn đề này:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0 /usr/lib/libGL.so

Điều này hơi khác với câu trả lời của gridstation.

Tôi đoán không cần cài đặt cục bộ trình điều khiển Mesa, điều này có thể gây ra sự cố với trình điều khiển video thực của bạn.


2

Trên Ubuntu 64 bit,

1. Kiểm tra libGL,

$ locate libGL.so
/usr/lib/i386-linux-gnu/mesa/libGL.so.1
/usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0

2. Tạo liên kết biểu tượng nơi SDK được cài đặt

ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 /usr/local/android-studio/sdk/tools/lib/libGL.so

Tôi có thể xác nhận rằng điều này giải quyết được sự cố trong Ubuntu 64bit.
Yermo Lamers

2

Để làm cho nó hoạt động trên Ubuntu 12.10 (Quantal Quetzal) 64-bit, bạn phải làm hai việc:

1) Bạn phải khởi tạo LD_LIBRARY_PATH

Ví dụ:

export LD_LIBRARY_PATH=~/tests/android/adt-bundle-linux-x86_64/sdk/tools/lib

Nhận xét: thay đổi đường dẫn đến vị trí của bạn

2) Bạn phải tạo một liên kết tượng trưng

a) Sử dụng locate libGLđể tìm đúng thư viện:

rudy@vsolutions:~$ locate libGL
/home/rudy/opt/android/android-sdk-linux/tools/lib/libGLES_CM_translator.so
/home/rudy/opt/android/android-sdk-linux/tools/lib/libGLES_V2_translator.so
/usr/lib/i386-linux-gnu/libGLU.so.1
/usr/lib/i386-linux-gnu/libGLU.so.1.3.1
...
/usr/lib32/nvidia-current/libGL.so.304.43

b) Tạo liên kết mềm

sudo ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0 /usr/lib/libGL.so

Nhận xét: sử dụng thư viện 64 bit trên hệ điều hành 64 bit!

Bây giờ hãy khởi động trình giả lập Hệ thống của tôi là Optimus và tôi đã cài đặt Bumblebee . Tôi có thể sử dụng "Trung tâm công nghệ nguồn mở của Intel" "Mesa DRI Intel (R) Ironlake Mobile" "2.1 Mesa 9.0" hoặc "NVIDIA Corporation" "GeForce GT 330M / PCIe / SSE2" "3.3.0 NVIDIA 304.43".

a) Intel

/home/rudy/tests/android/adt-bundle-linux-x86_64/sdk//tools/emulator64-arm -avd avd_42 -scale 0.46 -gpu on -verbose

b) Nvidia

optirun /home/rudy/tests/android/adt-bundle-linux-x86_64/sdk//tools/emulator64-arm -avd avd_42 -scale 0.46 -gpu on -verbose

Bình luận:

  • Tôi không thấy bất kỳ sự khác biệt nào giữa thẻ Intel và Nvidia ... Chắc chắn là do trình giả lập không chuyên sâu về GPU .
  • Trên hệ thống của tôi là Intel Core i5, phải mất gần 1 phút để khởi động trình giả lập ... Hãy kiên nhẫn ... Tôi thấy trình mô phỏng khá nhanh sau khi được tải (đợi 1 phút). Nếu bạn khởi động trình giả lập từ Eclipse IDE , thì trình mô phỏng sẽ thực hiện mô phỏng phần mềm (GPU đang tắt) và mất 1 phút 30 để bắt đầu ... Nó chậm hơn nhiều so với việc sử dụng thẻ Intel hoặc Nvidia !!!
  • verbose là tham số để sử dụng để hiển thị nhiều chẩn đoán hơn
  • optirunlà lệnh sử dụng Nvidia trên Bumblebee. Nếu bạn không có Bumblebee, đừng sử dụng nó!
  • avd là một thiết bị ảo
  • gpu on để sử dụng thẻ đồ họa

1

OSError: libGL.so: không thể mở tệp đối tượng được chia sẻ: Không có tệp hoặc thư mục như vậy

Nó có thể xuất hiện trên hệ thống Linux khi bạn cố gắng khởi chạy VNL lần đầu tiên. Để giải quyết vấn đề này, hãy tạo (với tư cách là quản trị viên) một liên kết mới trong /usr/lib:

sudo ln -s /usr/lib/libGL.so.1.2 /usr/lib/libGL.so

Nếu bạn có Linux 64-bit, hãy sử dụng /usr/lib64 instead.

Trước tiên, hãy kiểm tra xem bạn thực sự có libGL.so.1.2trong /usr/libhoặc /usr/lib64; nó có thể được gọi libGL.so.1hoặc một cái gì đó khác thay vào đó hoặc nằm trong một thư mục khác, tùy thuộc vào trình điều khiển video.

Bạn có thể sử dụng định vị libGLđể tìm đúng tệp cần liên kết.


1

Tôi gặp vấn đề tương tự. Nhưng trong trường hợp của tôi, tôi đã giải quyết nó theo cách khác (tôi nghĩ, tốt hơn).

Trong tình huống của tôi (Lubuntu 13.10), chỉ cần cài đặt thư viện libgl1-mesa-devthông qua trình quản lý Gói Synaptic là đủ ( libgl1-mesa-drithư viện đã được cài đặt theo mặc định khi bản phân phối Lubuntuu được thiết lập).

Điều đó giải quyết tất cả những rắc rối của việc đặt các liên kết từ tệp này sang tệp khác và cũng ngăn ngừa ô nhiễm hệ thống của bạn:

  • Làm thế nào bạn biết được sau vài tháng (hoặc vài năm) những liên kết chuyên dụng nào bạn đã đặt để giữ cho hệ thống hoạt động?
  • Điều gì về một bản cập nhật trong tương lai, nếu bạn bắt đầu tự làm những việc đó? Một cái gì đó sẽ bị hỏng / không được cập nhật do "can thiệp thủ công"?

Nếu bạn sử dụng "cơ chế hệ thống", tất cả được thực hiện cho bạn. Và thực hiện chính xác. Đó là lý do tại sao những công cụ đó ở nơi đầu tiên.

Rgds tốt nhất,


Vừa rồi thấy rằng @Tanyasipeti cũng làm như vậy thông qua apt-get. Nhưng trong trường hợp của tôi, nó đã giải quyết được vấn đề hoàn toàn. Tôi đã thiết lập và chạy trình giả lập.
GeertVc,

Tôi chỉ tự mình tìm ra nó cho ngày 13,10 và muốn thêm một cái gì đó tương tự như một câu trả lời!
Veger,

1

Tương tự như user1289608, tôi có thể tạo liên kết sym từ bản cài đặt hiện có của Mesa:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2 /usr/lib/libGL.so

0

Tôi đang sử dụng Ubuntu 12.04 64-bit. Liên kết /usr/lib64/libGLC.so.0với /usr/lib64/libGL.sodường như giải quyết được vấn đề.

CHỈNH SỬA: Nó dừng các thông báo lỗi, nhưng trình giả lập vẫn còn chậm đối với tôi.


Vâng, trình giả lập cũng cực kỳ chậm đối với tôi.
IgorGanapolsky

0

Điều này đã làm việc cho tôi:

Khởi động lại adb từ DDMS:
Trong Eclipse: Window> Open Perspective ...> Other> DDMS. Chọn trình giả lập từ ngăn bên trái và chọn "Khởi động lại adb"

Bạn cũng có thể khởi động lại máy chủ adb từ cửa sổ đầu cuối.

android-sdk-linux/platform-tools/adb kill-server
android-sdk-linux/platform-tools/adb start-server

0

Tôi đã tìm thấy thư mục cho libGL bằng lệnh "định vị"

Hóa ra là trong / usr / lib / i386-linux-gnu /

~ $ định vị libGL
/usr/lib/i386-linux-gnu/libGLEW.so.1.8
/usr/lib/i386-linux-gnu/libGLEW.so.1.8.0
/ usr / lib / i386-linux-gnu / libGLEWmx .so.1.8
/usr/lib/i386-linux-gnu/libGLEWmx.so.1.8.0
/usr/lib/i386-linux-gnu/libGLU.so.1
/ usr / lib / i386-linux-gnu / libGLU .so.1.3.1
/usr/lib/i386-linux-gnu/mesa/libGL.so.1
/usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0


0

Để cài đặt Debian 7 'Wheezy', tôi đã sử dụng lệnh sau:

ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1 opt/android/tools/lib/libGL.so

0
sudo apt-get install libgl1-mesa-dev
cd ~/Development/adt-bundle-linux-x86_64-20140321/sdk/tools/lib
unlink libGL.so 
ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0 libGL.so

đó là nó!


0

Tôi gặp sự cố này vì tôi đã chọn "Sử dụng GPU máy chủ" khi tạo AVD của mình. Tôi đã thử nó với tùy chọn đó không được chọn và tôi đã có thể khởi động trình giả lập thành công. Điều này có thể chấp nhận được đối với mục đích thử nghiệm của tôi, nhưng nếu việc sử dụng GPU chủ là quan trọng, bạn có thể muốn thử một số giải pháp khác tại đây.



-1

Tôi đã giải quyết vấn đề này bằng cách cài đặt lại libgl1, cả thư viện 64 và 32 bit:

$ sudo apt-get install --reinstall libgl1-mesa-glx libgl1-mesa-glx:i386

Bối cảnh: Trước đây tôi đã chuyển từ trình điều khiển radeon miễn phí trở lại fglrx. Tôi đoán điều này bằng cách nào đó đã làm hỏng libgl1 của tôi, vì fglrx đi kèm với phiên bản riêng của nó.

Ngoài ra, tôi nghĩ rằng các giải pháp khác được cung cấp ở đây có thể nguy hiểm, bởi vì nó là sai khi liên kết biểu tượng các thư viện chia sẻ 32 bit vào thư mục (64 bit) / lib /.


-2

Kiểm tra xem bạn đã libgl1-mesa-*cài đặt các gói chưa. Nếu vậy, hãy cài đặt libgl1-mesa-devgói để lấy các đối tượng được chia sẻ không phiên bản.

Bạn không cần phải làm điều này - đó là lỗi của nhóm Android. Hãy cho họ nghỉ ngơi, họ chỉ là những nhà phát triển Java.


tôi đã có mesa-libGL-dev trong hệ thống của tôi, nhưng vẫn có lỗi
php.khan

Điều này đã làm việc cho tôi trên Ubuntu 11.10 32-bit. Tôi đã cài đặt libgl1-mesa-dev và không còn thông báo lỗi khi khởi động emultor. Tôi không cần thực hiện bất kỳ liên kết nào, nhưng có lẽ điều này sẽ được yêu cầu trên 64-bit?
Katherine Rix
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.