Cân nhắc điều chỉnh biến môi trường PKG_CONFIG_PATH nếu bạn đã cài đặt phần mềm ở tiền tố không chuẩn. Điều đó có nghĩa là gì ?
Cân nhắc điều chỉnh biến môi trường PKG_CONFIG_PATH nếu bạn đã cài đặt phần mềm ở tiền tố không chuẩn. Điều đó có nghĩa là gì ?
Câu trả lời:
PKG_CONFIG_PATH
là một biến môi trường chỉ định các đường dẫn bổ sung trong đó pkg-config
sẽ tìm kiếm các tệp .pc của nó.
Biến này được sử dụng để tăng đường dẫn tìm kiếm mặc định của pkg-config. Trên một hệ thống Unix điển hình, nó sẽ tìm kiếm trong các thư mục /usr/lib/pkgconfig
và /usr/share/pkgconfig
. Điều này thường sẽ bao gồm các mô-đun cài đặt hệ thống. Tuy nhiên, một số mô-đun cục bộ có thể được cài đặt trong một tiền tố khác nhau, chẳng hạn như /usr/local
. Trong trường hợp đó, cần phải thêm đường dẫn tìm kiếm để pkg-config có thể định vị các tệp .pc.
Các pkg-config
chương trình được sử dụng để lấy thông tin về các thư viện được cài đặt trong hệ thống. Việc sử dụng chính pkg-config
là cung cấp các chi tiết cần thiết để biên dịch và liên kết chương trình với thư viện. Siêu dữ liệu này được lưu trữ trong các tệp pkg-config. Các tệp này có hậu tố .pc và nằm trong các vị trí cụ thể được biết đến với công cụ pkg-config.
Để kiểm tra PKG_CONFIG_PATH
giá trị, sử dụng lệnh này:
echo $PKG_CONFIG_PATH
Để đặt PKG_CONFIG_PATH
giá trị sử dụng:
export PKG_CONFIG_PATH=/usr/lib/pkgconfig
hoặc là
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
Câu trả lời đầu tiên không đủ rõ ràng về mặt kỹ thuật. Từ trang man (mở terminal, gõ man pkg-config
):
pkg-config
lấy thông tin về các gói từ các tệp siêu dữ liệu đặc biệt. Các tệp này được đặt tên theo gói và có.pc
phần mở rộng. Trên hầu hết các hệ thống,pkg-config
trông trong/usr/lib/pkgconfig
,/usr/share/pkgconfig
,/usr/local/lib/pkgconfig
và/usr/local/share/pkgconfig
cho những tập tin này. Nó cũng sẽ tìm trong danh sách các thư mục được phân tách bằng dấu hai chấm (trên Windows, được phân tách bằng dấu chấm phẩy) được chỉ định bởiPKG_CONFIG_PATH
biến môi trường.
Vì vậy, pkg-config
chương trình không có trong PKG_CONFIG_PATH
thư mục; tuy nhiên, nếu bạn cài đặt một thư viện, để thông tin sử dụng nó trong một automake
tập lệnh có thể truy cập được, nó cần phải có trong một thư pkg-config
mục.
/usr/local/lib/x86_64-linux-gnu
đưa vào như một vị trí tìm kiếm tự động miễn phí (có trống PKG_CONFIG_PATH
) và thực sự, rất nhiều .pc
tệp - đáng chú ý bao gồm GTK + et al. - Sống tại đó. Lý do cho điều này là để kích hoạt tính sẵn có đa kiến trúc của một gói, như được nêu ở đây: askubfox.com/questions/449348/ Kẻ
pkg-config
sẽ tìm kiếm trên hệ thống của bạn: askubuntu.com/a/373217/436580
Để xem nơi pkg-config (phiên bản 0.24 trở lên) tìm kiếm các thư viện đã cài đặt theo mặc định, hãy sử dụng lệnh sau:
pkg-config --variable pc_path pkg-config
Để sửa đổi đường dẫn đó, đặt PKG_CONFIG_PATH
biến môi trường. Các tập tin người đàn ông PKG_CONFIG_PATH
là:
Danh sách các thư mục được phân tách bằng dấu hai chấm (trên Windows, dấu chấm phẩy) để tìm kiếm tệp .pc. Thư mục mặc định sẽ luôn được tìm kiếm sau khi tìm kiếm đường dẫn; mặc định là libdir / pkgconfig: datadir / pkgconfig trong đó libdir là libdir trong đó pkg-config và datadir là datadir nơi pkg-config được cài đặt.
echo $(pkg-config --variable pc_path pkg-config)${PKG_CONFIG_PATH:+:}${PKG_CONFIG_PATH}
PKG_CONFIG_PATH
và vẫn có các thư mục được tìm kiếm mặc định, cộng với việc đặt giá trị không trống sẽ không xóa mặc định.
Bạn đang cố gắng xây dựng một phần mềm, giả sử Widget. Widget dựa vào một thư viện khác, libcog vì mục đích tranh luận. Quá trình xây dựng của widget (có thể là tập lệnh cấu hình) đang sử dụng pkg-config để xác định cách sử dụng libcog. pkg-config không biết gì về libcog.
Nếu libcog không được cài đặt, đó là vấn đề của bạn. Có một cơ hội tốt rằng một bản cài đặt libcog tiêu chuẩn sẽ khắc phục vấn đề. Tùy thuộc vào hệ thống của bạn, bạn có thể cần cài đặt phiên bản "nhà phát triển" bổ sung của gói; cuối cùng nó thường có "-devel" hoặc "-dev", vì vậy nếu bạn cài đặt "libcog", bạn cũng có thể cần phải cài đặt "libcog-devel".
Nếu libcog được cài đặt, có lẽ nó không được cài đặt theo cách mà pkg-config có thể tìm thấy nó. Có lẽ có một tập tin libcog.pc ở đâu đó trên hệ thống của bạn. Để tranh luận, đó là tại /opt/cog/lib/pkgconfig/libcog.pc. Trong trường hợp đó, bạn có thể nói với pkg-config về nó bằng cách đặt PKG_CONFIG_PATH vào thư mục chứa libcog.pc. Vì vậy, trong một vỏ Bourne hoặc tương tự, một cái gì đó như
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/cog/lib/pkgconfig/
Khi đã xong, chạy lại lệnh không thành công sẽ hy vọng hoạt động.
Nếu libcog được cài đặt, bao gồm các thư viện và tệp tiêu đề và bạn không có tệp libcog.pc, mọi thứ sẽ trở nên tồi tệ. Có lẽ một bản cài đặt libcog tiêu chuẩn bao gồm thông tin, nếu không thì Widget sẽ không dựa vào nó. Trước tiên tôi muốn điều tra cài đặt lại libcog. Có thể tự tạo tệp libcog.pc, nhưng làm cho đúng thì rất khó và đặc biệt cao đối với một thư viện nhất định.
Tôi nhìn vào trang con người trên hệ thống 64 bit của mình và có một chút bối rối. Nó nói trong một dòng:
pkg-config lấy thông tin về các gói từ các tệp siêu dữ liệu đặc biệt. Các tệp này được đặt tên theo gói, với phần mở rộng .pc. Theo mặc định, pkg-config tìm trong tiền tố direc / lib / pkgconfig cho các tệp này; nó cũng sẽ tìm trong danh sách các thư mục được phân tách bằng dấu hai chấm (trên Windows, được phân tách bằng dấu chấm phẩy) được chỉ định bởi môi trường PKG_CONFIG_PATH có thể thay đổi.
Tôi đã giả định rằng nó luôn luôn nhìn vào thư mục lib / pkgconfig. Hóa ra các thư mục của chính nó. Trong trường hợp của tôi, tôi đã cố gắng biên dịch hướng dẫn gtk hello world. Tôi định vị tập tin tôi muốn, vd
locate gtk | grep '\.pc'
Trong số các kết quả là:
/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc
Cuối cùng là xuất khẩu.
export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/
man
trang này quá đơn giản cho các hệ thống hiện đại, có nhiều kiến trúc. Tôi đã bối rối trong một thời gian bởi vì, trên Debian 8 x86, pkg-config
đã tìm trong thư mục x86_64 (không có gì trong PKG_CONFIG_PATH
). Tôi không chắc cách này được kết hợp, nhưng dòng lệnh để thăm dò điều này được hiển thị bởi @GrandAdmirus cho thấy nó được điều khiển bởi gói --variable pc_path
được đặt (bằng cách nào đó!) Cho pkg-config
gói riêng.
Dường như với tôi rằng hầu hết các câu trả lời có quá nhiều thông tin cần thiết.
Phần mềm mà một người cài đặt có thể (và thường không) dựa vào một số thư viện và / hoặc tiêu đề và Hệ thống sử dụng pkg-config để tìm chúng.
Nói như vậy, hãy pkg-config
tìm các tệp này trong các thư mục của hệ thống được xác định trước (mặc định). Những thư mục đó là "tiền tố". Ví dụ: một thư viện có tiền tố /usr/local
dự kiến sẽ có các tiêu đề /usr/local/include
và chính thư viện sẽ ở trong đó /usr/local/lib
.
pkg-config tuy nhiên cũng tìm các thư viện trong thư mục được liệt kê trong biến môi trường PKG_CONFIG_PATH .
Sau đó, nếu bạn cài đặt phần mềm bên ngoài danh sách thư mục mặc định, bạn phải "điều chỉnh" danh sách, cụ thể là thêm thư mục của bạn vào PKG_CONFIG_PATH
$ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:<your-directory>
PKG_CONFIG_PATH
xác định thư mục bổ sung, trong đó để tìm kiếm chỉ yourPkg.pc
( pkg-config
đặc điểm kỹ thuật) tập tin. Nó không ảnh hưởng đến những thứ cụ thể pkg như thư mục tìm kiếm thư viện.
Tôi đã cố gắng cài đặt phiên bản mới nhất của axel và tôi đã chạy ./configure
và tôi đã nhận được điều này:
configure: error: Package requirements (openssl) were not met:
No package 'openssl' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables SSL_CFLAGS
and SSL_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
Vì vậy, tôi đã cố gắng:
$ pkg-config --cflags openssl
và tôi đã nhận được:
Package openssl was not found in the pkg-config search path.
Perhaps you should add the directory containing `openssl.pc'
to the PKG_CONFIG_PATH environment variable
No package 'openssl' found
Rõ ràng là tôi đã cài đặt openssl ( sudo apt-get install openssl
) Nhưng trên đầu ra ở trên như bạn có thể thấy nó ghi "Không tìm thấy gói 'openssl'". Vì vậy, để chắc chắn rằng tôi đã làm:
find / -type f -name "*.pc" |& grep -iv permission | grep openssl
Hóa ra tôi cần một số gói khác cho chắc chắn, vì vậy một chút googling và tôi thấy rằng tôi phải cài đặt gói này:
sudo apt-get install libssl-dev
Và tất cả điều này không có gì để làm với việc thay đổi biến env pkg-config.
Những người đang sử dụng https://github.com/confluentinc/confluent-kafka-go
Vui lòng làm theo librdkafka cài đặt
Bây giờ bạn có thể sử dụng go install / go run go build