Variabel lingkungan PKG_CONFIG_PATH


74

Pertimbangkan untuk menyesuaikan variabel lingkungan PKG_CONFIG_PATH jika Anda menginstal perangkat lunak dalam awalan non-standar. Apa artinya ini ?


1
Saya hampir akan menanyakan hal ini dengan cara yang sama kecuali Anda dapat meminta contoh penggunaan variabel lingkungan PKG_CONFIG_PATH yang tepat seperti "apa itu dan bagaimana cara menggunakannya?" Sepertinya jawaban yang Anda dapat mencoba untuk memberi tahu Anda ini. Saya menemukan ini banyak muncul selama ./configure ketika gagal menemukan dependensi.
Douglas G. Allen

Jawaban:


68

PKG_CONFIG_PATHadalah variabel lingkungan yang menentukan jalur tambahan yang pkg-configakan mencari file .pc-nya.

Variabel ini digunakan untuk menambah jalur pencarian default pkg-config. Pada sistem Unix yang khas, ia akan mencari di direktori /usr/lib/pkgconfigdan /usr/share/pkgconfig. Ini biasanya akan mencakup modul yang dipasang sistem. Namun, beberapa modul lokal dapat dipasang di awalan yang berbeda seperti /usr/local. Dalam hal ini, perlu untuk menambahkan alur pencarian sehingga pkg-config dapat menemukan file .pc.

The pkg-configProgram digunakan untuk mengambil informasi tentang perpustakaan terinstal di sistem. Penggunaan utama pkg-configadalah untuk memberikan rincian yang diperlukan untuk menyusun dan menautkan program ke perpustakaan. Metadata ini disimpan dalam file pkg-config. File-file ini memiliki akhiran .pc dan berada di lokasi tertentu yang dikenal dengan alat pkg-config.

Untuk memeriksa PKG_CONFIG_PATHnilainya gunakan perintah ini:

echo $PKG_CONFIG_PATH

Untuk mengatur PKG_CONFIG_PATHnilai gunakan:

export PKG_CONFIG_PATH=/usr/lib/pkgconfig

atau

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

@NathanKidd Terima kasih atas pengingatnya, komentar dihapus. Kesalahan asli tampaknya dihasilkan dari pengeditan penulis yang tidak asli.
Timothy Gu

@remram sepertinya kesalahan telah diperbaiki sekarang tetapi komentar Anda membuat orang bingung jika mereka tidak memeriksa dengan saksama riwayat edit. Bisakah Anda memeriksa Anda senang dengan akurasi saat ini dan mungkin menghapus komentar itu? (Dan saya akan menghapus milik saya.)
Nathan Kidd

@ devav2 kedua perintah ekspor tidak memperbaiki masalah
Shayan

38

Jawaban pertama secara teknis tidak cukup eksplisit. Dari halaman manual (buka terminal, ketik man pkg-config):

pkg-configmengambil informasi tentang paket dari file metadata khusus. File-file ini diberi nama setelah paket, dan memiliki .pcekstensi. Pada kebanyakan sistem, pkg-config terlihat di /usr/lib/pkgconfig, /usr/share/pkgconfig, /usr/local/lib/pkgconfigdan /usr/local/share/pkgconfiguntuk file-file ini. Selain itu akan terlihat dalam daftar direktori yang dipisahkan dengan titik dua (pada Windows, dipisahkan dengan titik koma) yang ditentukan oleh PKG_CONFIG_PATHvariabel lingkungan.

Jadi pkg-configprogram tidak ada dalam PKG_CONFIG_PATHdirektori; namun, jika Anda menginstal pustaka, agar informasi untuk menggunakannya dalam automakeskrip agar dapat diakses, perlu ada dalam direktori pkg-configyang disadari.


Frasa kunci tampaknya "pada kebanyakan sistem". Di Debian saya, misalnya, kami /usr/local/lib/x86_64-linux-gnudilemparkan sebagai lokasi pencarian otomatis gratis (dengan yang kosong PKG_CONFIG_PATH), dan memang, banyak .pcfile - termasuk GTK + et al. - hidup disana. Alasannya adalah untuk mengaktifkan ketersediaan multi-arsitektur dari suatu paket secara bersamaan, seperti diuraikan di sini: askubuntu.com/questions/449348/…
underscore_d

(tidak dapat mengedit lagi) @GrandAdmiral dalam jawaban lebih jauh di bawah halaman ini menunjukkan cara memeriksa jalur default yang pkg-configakan mencari di sistem Anda: askubuntu.com/a/373217/436580
underscore_d

35

Untuk melihat di mana pkg-config (versi 0.24 atau lebih baru) mencari pustaka yang diinstal secara default, gunakan perintah berikut:

pkg-config --variable pc_path pkg-config

Untuk memodifikasi jalur itu, atur PKG_CONFIG_PATHvariabel lingkungan. Status file man PKG_CONFIG_PATHadalah:

Daftar direktori yang dipisahkan dengan titik dua (pada Windows, dipisahkan dengan titik koma) untuk mencari file .pc. Direktori default akan selalu dicari setelah mencari path; defaultnya adalah libdir / pkgconfig: datadir / pkgconfig di mana libdir adalah libdir di mana pkg-config dan datadir adalah datadir tempat pkg-config diinstal.


3
skrip yang bermanfaat adalahecho $(pkg-config --variable pc_path pkg-config)${PKG_CONFIG_PATH:+:}${PKG_CONFIG_PATH}
albfan

5
Ini adalah jawaban bagus yang membantu saya. Namun, untuk memperjelas, Anda harus mengatakan "Untuk menambahkan ke jalur itu", daripada "Untuk memodifikasi", karena orang dapat memiliki PKG_CONFIG_PATHdirektori pencarian kosong dan masih memiliki standar, ditambah pengaturan nilai non-kosong tidak menghapus default.
underscore_d

Jawaban ini sangat berguna bagi saya, terima kasih! Saya mencoba mencari tahu apa jalur pencarian default untuk pkg-config sejak saya diinstal dengan Linuxbrew, jadi jalur default tidak ada. Terima kasih!
mxplusb

6

Anda sedang mencoba membuat perangkat lunak, katakanlah Widget. Widget mengandalkan perpustakaan lain, libcog demi argumen. Proses pembuatan widget (mungkin skrip konfigurasi) menggunakan pkg-config untuk menentukan cara menggunakan libcog. pkg-config tidak tahu apa-apa tentang libcog.

Jika libcog tidak diinstal, itu masalah Anda. Ada kemungkinan bagus bahwa instalasi standar libcog akan memperbaiki masalah. Tergantung pada sistem Anda, Anda mungkin perlu menginstal versi "pengembang" tambahan dari paket; sering memiliki "-devel" atau "-dev" di akhir, jadi jika Anda menginstal "libcog", Anda mungkin juga perlu menginstal "libcog-devel".

Jika libcog diinstal, itu mungkin tidak diinstal dengan cara yang bisa ditemukan oleh pkg-config. Mungkin ada file libcog.pc di suatu tempat di sistem Anda. Demi argumen, ada di /opt/cog/lib/pkgconfig/libcog.pc. Dalam hal ini, Anda dapat memberi tahu pkg-config tentang hal itu dengan mengatur PKG_CONFIG_PATH ke direktori yang memegang libcog.pc. Jadi dalam cangkang Bourne atau sejenisnya, sesuatu seperti

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/cog/lib/pkgconfig/

Setelah selesai, menjalankan kembali perintah yang gagal semoga akan berhasil.

Jika libcog diinstal, termasuk perpustakaan dan file header, dan Anda tidak memiliki file libcog.pc, semuanya berjalan buruk. Agaknya instalasi standar libcog menyertakan informasi, atau jika tidak, Widget tidak akan bergantung padanya. Saya pertama kali akan menyelidiki menginstal ulang libcog. Dimungkinkan untuk secara manual membuat file libcog.pc, tetapi memperbaikinya sulit dan sangat spesifik untuk pustaka yang diberikan.


4
Satu hal - bagaimana jika PKG_CONFIG_PATH didefinisikan - ini akan menimpanya dengan benar?
NoBugs

1
@NoBugs tangkapan yang bagus, saya sudah mengedit jawaban (beberapa tahun kemudian!) Untuk menambahkannya.
Joe Malt

5

Saya melihat halaman manual pada sistem 64-bit saya dan agak bingung. Dikatakan dalam satu baris:

pkg-config mengambil informasi tentang paket dari file metadata khusus. File-file ini diberi nama setelah paket, dengan ekstensi .pc. Secara default, pkg-config terlihat pada awalan direktori / lib / pkgconfig untuk file-file ini; itu juga akan melihat dalam daftar direktori yang dipisahkan oleh titik dua (pada Windows, dipisahkan dengan titik koma) yang ditentukan oleh variabel lingkungan PKG_CONFIG_PATH.

Saya berasumsi bahwa itu juga terlihat di direktori lib / pkgconfig. Ternyata itu direktori sendiri. Dalam kasus saya, saya mencoba mengkompilasi tutorial hello world gtk. Saya menemukan file yang saya inginkan misalnya

locate gtk | grep '\.pc'

Di antara hasilnya adalah:

/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc

Akhirnya adalah melakukan ekspor.

export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/

1
+1 untuk menunjukkan bagaimana manhalaman terlalu menyederhanakan untuk sistem modern, multi-arsitektur. Saya bingung untuk sementara karena, pada Debian 8 x86, pkg-configsudah terlihat di folder x86_64 (tanpa apa-apa di PKG_CONFIG_PATH). Saya tidak yakin bagaimana ini dimasukkan, tetapi baris perintah untuk menyelidiki ini ditunjukkan oleh @GrandAdmiral menunjukkan itu dikendalikan oleh --variable pc_pathyang diatur (entah bagaimana!) Untuk pkg-configpaket sendiri.
underscore_d

5

Menurut saya, sebagian besar jawaban memiliki informasi terlalu banyak daripada yang dibutuhkan.

Perangkat lunak yang diinstal salah satu (dan biasanya memang) bergantung pada beberapa perpustakaan dan / atau header dan Sistem menggunakan pkg-config untuk menemukannya.

Mengatakan demikian, pkg-configmencari file-file ini di direktori sistem yang telah ditentukan (default). Folder itu adalah "awalan". Misalnya perpustakaan yang memiliki awalan /usr/localdiharapkan memiliki header /usr/local/include, dan perpustakaan itu sendiri akan masuk /usr/local/lib. pkg-config mencari pustaka juga di direktori yang tercantum dalam variabel lingkungan PKG_CONFIG_PATH .

Kemudian jika Anda menginstal perangkat lunak di luar daftar folder default Anda harus "menyesuaikan" daftar, yaitu menambahkan direktori Anda ke PKG_CONFIG_PATH

$ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:<your-directory>

Untuk info lebih lanjut, Anda dapat melihat di sini dan di sini


PKG_CONFIG_PATHmenentukan direktori tambahan di mana untuk mencari hanya yourPkg.pc ( pkg-configspesifikasi) file. Itu tidak mempengaruhi hal-hal spesifik pkg seperti direktori pencarian perpustakaan.
underscore_d

1

Itu berarti Anda mencoba membangun sesuatu dari sumber, dan itu tidak dapat menemukan semua dependensi yang dibutuhkan. The pkg-configScript menggunakan untuk menemukan file pembangunan untuk orang-orang perpustakaan, output pesan ini.


0

Saya mencoba menginstal versi terbaru dari axel dan saya berlari ./configuredan saya mendapatkan ini:

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.

Jadi saya mencoba:

$ pkg-config --cflags openssl

dan saya mendapat:

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

Jelas saya telah menginstal openssl ( sudo apt-get install openssl) Tetapi pada output di atas seperti yang Anda lihat menyatakan "Tidak ada paket 'openssl' ditemukan". Jadi untuk memastikan saya melakukannya:

find / -type f -name "*.pc" |& grep -iv permission | grep openssl

Ternyata saya butuh paket lain pasti, jadi sedikit googling dan saya menemukan bahwa saya harus menginstal paket ini:

sudo apt-get install libssl-dev

Dan semua ini tidak ada hubungannya dengan mengubah variabel env pkg-config path.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.