thêm thư viện mới, cũ treo xung quanh


7

Trong Ubuntu 12.04, tôi đã tải xuống nguồn cho một thư viện không gian địa lý, gdal-1.11.0, vào ~ / src, cấu hình nó và biên dịch thành công, có vẻ như vậy. Các tệp mới như libgdal.ađược đặt vào / usr / local / lib.

Tuy nhiên khi tôi chạy một chương trình phụ thuộc vào nó,

$ ogrinfo --formats

tôi có

ERROR 1: ogrinfo was compiled against GDAL 1.11 but current library version is 1.10

Có vẻ như tôi đã không gỡ bỏ phiên bản cũ hơn của GDAL. Tôi nên làm thế nào?

Một số thông tin về hệ thống của tôi:

$ uname -a
Linux ubuntu 3.11.0-15-generic #25~precise1-Ubuntu SMP Thu Jan 30 17:39:31 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

Câu trả lời:


3

Có vẻ như tôi đã không gỡ bỏ phiên bản cũ hơn của GDAL. Tôi nên làm thế nào?

Cố gắng make uninstalllà một lựa chọn hợp lý, nếu bạn đã giữ các nguồn, đó là cách thực hành tốt nếu bạn đang thực hiện cài đặt cục bộ.

Một cách khác đơn giản là xóa tất cả các tệp liên quan đến thư viện này, cả cũ và mới và sau đó cài đặt lại tệp mới.

Tuy nhiên, tôi phải tự hỏi tại sao bạn lại cài đặt từ nguồn khi gói có sẵn trên Debian, và do đó trên Ubuntu. Nếu bạn đang sử dụng phiên bản / phiên bản Ubuntu cũ hơn và không có PPA phù hợp, hãy lưu ý rằng việc nhập lại từ phiên bản / phiên bản Ubuntu mới hơn là có thể, và phần lớn thời gian không khó.

Các phụ thuộc xây dựng được liệt kê của GDAL 1.11 trong Debian là

Build-Depends: debhelper (> = 9), dh-autoreconf, zlib1g-dev, libnetcdf-dev (> = 1: 4.0.0), netcdf-bin, libjasper-dev, libpng-dev, libjpeg-dev, libgif dev, libwebp-dev, libhdf4-alt-dev [! ppc64], libhdf5-dev (> = 1.8.8), libpcre3-dev, libpq-dev, libxerces-c-dev, unixodbc-dev (> = 2.2.11 ), doxygen, d-shlibs, libgeos-dev, libmysqlclient-dev, dh-python, python-all-dev (> = 2.6.6-3 ~), python-numpy, python3-all-dev, python3-numpy, libcurl4-gnutls-dev | libcurl-ssl-dev, libsqlite3-dev, libogdi3.2-dev, chrpath, swig, patch, libapiat1-dev, libproj-dev, libdap-dev, libxml2-dev, libspatialite-dev (> = 2.4.0 4), libepsilon-dev (> = 0.9.1-1 ~), libpoppler-private-dev, liblzma-dev, libopenjpeg-dev, libarmadillo-dev, libfreexl-dev (> = 1.0.0), libkml-dev ( > = 1.3.0 ~), liburiparser-dev, default-jdk, ant

Trông không tệ lắm. Để rõ ràng, ý tưởng ở đây là xây dựng lại các nguồn Debian / Ubuntu trên bản phát hành của bạn. Nếu bạn muốn lời khuyên hoặc chi tiết hơn, tôi có thể giải thích.

Dưới đây là các phiên bản GDAL có sẵn trong Debian.

$ apt-cache policy libgdal1-dev
libgdal1-dev:
  Installed: (none)
  Candidate: 1.9.0-3.1
  Version table:
     1.11.0+dfsg1-1~exp2 0
          1 http://debian.lcs.mit.edu/debian/ experimental/main amd64 Packages
     1.10.1+dfsg-6 0
         50 http://debian.lcs.mit.edu/debian/ testing/main amd64 Packages
         50 http://debian.lcs.mit.edu/debian/ unstable/main amd64 Packages
     1.9.0-3.1 0
        500 http://debian.lcs.mit.edu/debian/ wheezy/main amd64 Packages
     1.6.3-4+b1 0
        500 http://debian.lcs.mit.edu/debian/ squeeze/main amd64 Packages

Tôi cần cài đặt từ nguồn vì tôi muốn bao gồm hỗ trợ cho FileGDB (có thể nhiều hơn bạn muốn biết nhưng trước khi maketôi chạy configure --with-fgdb=/usr/local/FileGDB_API --with-pg=/usr/bin/pg_config). Tuy nhiên, phiên bản 1.10 không phải do tôi biên soạn, tôi đã làm nó một cách dễ dàng và chỉ lấy nó bằng apt-get, hoặc có lẽ nó được lấy như một phần phụ thuộc, tôi không nhớ. Xem xét rằng, nếu tôi chạy thực hiện gỡ cài đặt, điều đó sẽ không gỡ cài đặt phiên bản 1.10, phải không? Bạn đề nghị "xóa tất cả các tệp liên quan đến thư viện này." Những tập tin nào?
dùng1416227

Bạn không cần phải cài đặt từ nguồn để làm điều đó. Chỉ cần thay đổi lệnh mà debian sử dụng để biên dịch. Bạn có thể tìm thấy nó trong tập tin debian/rules.
Faheem Mitha

Điều này sẽ có tác dụng phụ đáng tiếc là bạn sẽ có gói hệ thống nhị phân tùy thuộc vào gói được cài đặt cục bộ, nhưng tôi sẽ không nói cho ai biết nếu bạn không.
Faheem Mitha

Hấp dẫn. Tôi tìm tập tin ở debian/rulesđâu?
dùng1416227

2
Được chứ. Tôi đã đưa ra đề nghị đơn giản nhất của bạn đó là "xóa tất cả các tệp liên quan đến thư viện sau đó cài đặt lại." Vì vậy, tôi đã chạy thành công các lệnh này, loại bỏ lỗi: Đầu tiên, $ sudo apt-get remove python-gdal python3-gdal libgdal1h libgdal1-dev libgdal-perl libgdal-java libgdal-doc libgdal-dev gdal-binSau đó, $ sudo make installmã nguồn cho gdal-1.11.0 và $ sudo ldconfigsau đó $ ogrinfo --formatskhông tạo ra lỗi. Đối với danh sách dài các gói tôi phải xóa, tôi đã tìm thấy các gói
gói.debian.org/source/sid/gdal

6

Các tập tin libgdal.asẽ chỉ được sử dụng khi bạn liên kết ogrinfovới nó mà không sử dụng các thư viện chia sẻ. Nếu ogrinfođược liên kết theo cách đó (không sử dụng các thư viện dùng chung), bạn sẽ không gặp lỗi, vì thư viện (phiên bản 1.11) sẽ là một phần của tệp thực thi.

Những gì bạn nên thử là chạy

sudo ldconfig

sau khi biên dịch và cài đặt phiên bản mới gdal, sẽ thông báo cho hệ thống (trong đó phiên bản 1.10 đã được tải dưới dạng thư viện dùng chung), có sẵn phiên bản mới.


Tôi chạy sudo ldconfig, sau đó lặp lại ogrinfo --formats, và tôi đã nhận được cùng một lỗi.
dùng1416227

Bạn có thể thấy, từ đầu ra từ trình biên dịch / cài đặt nơi nó đã sao chép libdalXXXX.sothư viện mới không? Sau đó, bạn có thể thử làm điều export LD_DEBUG=filesđó trước khi bắt đầuogrinfo
Anthon

Tôi đã giải quyết vấn đề của mình (chi tiết trong các nhận xét cho @ faheem-mitha) bằng cách xóa các thư viện GDAL cũ, biên dịch lại GDAL mới, sau đó chạy sudo ldconfignhư bạn đề xuất.
dùng1416227

@ user1416227 Tôi rất vui vì nó đã được giải quyết.
Anthon

Đây là câu trả lời chính xác. NẾU bạn có các phiên bản cũ của ogr2ogr hoặc GDAL, và đã cài đặt một phiên bản mới, ví dụ, bằng cách biên dịch nó bằng TAY, sudo ldconfignên làm cho nó trỏ đến lib mới và làm cho nó hoạt động.
George Silva
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.