พิจารณาปรับตัวแปรสภาพแวดล้อม PKG_CONFIG_PATH หากคุณติดตั้งซอฟต์แวร์ในคำนำหน้าที่ไม่ได้มาตรฐาน สิ่งนี้หมายความว่า ?
พิจารณาปรับตัวแปรสภาพแวดล้อม PKG_CONFIG_PATH หากคุณติดตั้งซอฟต์แวร์ในคำนำหน้าที่ไม่ได้มาตรฐาน สิ่งนี้หมายความว่า ?
คำตอบ:
PKG_CONFIG_PATH
เป็นตัวแปรสภาพแวดล้อมที่ระบุเส้นทางเพิ่มเติมซึ่งpkg-config
จะค้นหาไฟล์. pc
ตัวแปรนี้ใช้เพื่อเพิ่มพา ธ การค้นหาดีฟอลต์ของ pkg-config บนระบบปฏิบัติการยูนิกซ์ทั่วไปจะค้นหาในไดเรกทอรีและ/usr/lib/pkgconfig
/usr/share/pkgconfig
โดยปกติจะครอบคลุมโมดูลที่ติดตั้งระบบ /usr/local
แต่บางโมดูลในท้องถิ่นอาจจะติดตั้งในคำนำหน้าแตกต่างกันเช่น ในกรณีดังกล่าวจำเป็นต้องผนวกเส้นทางการค้นหาล่วงหน้าเพื่อให้ pkg-config สามารถค้นหาไฟล์. pc
pkg-config
โปรแกรมจะใช้ในการดึงข้อมูลเกี่ยวกับห้องสมุดติดตั้งในระบบ การใช้งานหลักของpkg-config
คือการให้รายละเอียดที่จำเป็นสำหรับการรวบรวมและเชื่อมโยงโปรแกรมไปยังห้องสมุด ข้อมูลเมตานี้ถูกเก็บไว้ในไฟล์ pkg-config ไฟล์เหล่านี้มี. pc ต่อท้ายและอยู่ในตำแหน่งเฉพาะที่รู้จักในเครื่องมือ pkg-config
ในการตรวจสอบPKG_CONFIG_PATH
ค่าใช้คำสั่งนี้:
echo $PKG_CONFIG_PATH
ในการตั้งPKG_CONFIG_PATH
ค่าให้ใช้:
export PKG_CONFIG_PATH=/usr/lib/pkgconfig
หรือ
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
คำตอบแรกยังไม่ชัดเจนเพียงพอทางเทคนิค จากหน้าคน (เปิดเทอร์มินัลพิมพ์man pkg-config
):
pkg-config
ดึงข้อมูลเกี่ยวกับแพคเกจจากไฟล์ข้อมูลเมตาพิเศษ ไฟล์เหล่านี้ตั้งชื่อตามแพ็คเกจและมี.pc
นามสกุล ในระบบส่วนใหญ่pkg-config
มองใน/usr/lib/pkgconfig
,/usr/share/pkgconfig
,/usr/local/lib/pkgconfig
และ/usr/local/share/pkgconfig
สำหรับแฟ้มเหล่านี้ มันจะดูเพิ่มเติมในรายการที่คั่นด้วยโคลอน (บน Windows คั่นด้วยเครื่องหมายอัฒภาค) ของไดเรกทอรีที่ระบุโดยPKG_CONFIG_PATH
ตัวแปรสภาพแวดล้อม
ดังนั้นpkg-config
โปรแกรมไม่ได้อยู่ในPKG_CONFIG_PATH
ไดเรกทอรี อย่างไรก็ตามหากคุณติดตั้งไลบรารีเพื่อให้สามารถใช้ข้อมูลในautomake
สคริปต์เพื่อให้สามารถเข้าถึงข้อมูลได้จำเป็นต้องอยู่ในไดเรกทอรีpkg-config
ด้วย
/usr/local/lib/x86_64-linux-gnu
ถูกโยนเข้ามาเป็นสถานที่ค้นหาอัตโนมัติฟรี (ว่างเปล่าPKG_CONFIG_PATH
) และแน่นอนมี.pc
ไฟล์จำนวนมาก- มีชื่อเสียงรวมถึง GTK + et al - อยู่ทีนั่น. เหตุผลสำหรับสิ่งนี้คือการเปิดใช้งานความพร้อมใช้งานของสถาปัตยกรรมหลายแพคเกจพร้อมกันดังที่อธิบายไว้ที่นี่: askubuntu.com/questions/449348/…
pkg-config
จะค้นหาในระบบของคุณ: askubuntu.com/a/373217/436580
หากต้องการดูว่า pkg-config (รุ่น 0.24 หรือใหม่กว่า) ค้นหาไลบรารีที่ติดตั้งเป็นค่าเริ่มต้นให้ใช้คำสั่งต่อไปนี้:
pkg-config --variable pc_path pkg-config
ในการแก้ไขพา ธ นั้นให้ตั้งค่าPKG_CONFIG_PATH
ตัวแปรสภาพแวดล้อม สถานะไฟล์แมนPKG_CONFIG_PATH
คือ:
รายการไดเร็กทอรีที่คั่นด้วยโคลอน (บน Windows คั่นด้วยเครื่องหมายอัฒภาค) เพื่อค้นหาไฟล์. pc ไดเรกทอรีเริ่มต้นจะถูกค้นหาเสมอหลังจากค้นหาเส้นทาง ค่าเริ่มต้นคือ libdir / pkgconfig: datadir / pkgconfig โดยที่ libdir เป็น libdir โดยที่ pkg-config และ datadir เป็น datadir ที่ติดตั้ง pkg-config ไว้
echo $(pkg-config --variable pc_path pkg-config)${PKG_CONFIG_PATH:+:}${PKG_CONFIG_PATH}
PKG_CONFIG_PATH
และยังมีไดเรกทอรีค้นหาเริ่มต้นรวมทั้งการตั้งค่าที่ไม่ใช่ช่องว่างจะไม่ล้างค่าเริ่มต้น
คุณกำลังพยายามสร้างซอฟต์แวร์ชิ้นหนึ่งสมมติว่า Widget วิดเจ็ตอาศัยไลบรารีอื่น libcog เพื่อการโต้แย้ง กระบวนการสร้างวิดเจ็ต (อาจเป็นสคริปต์กำหนดค่า) กำลังใช้ pkg-config เพื่อพิจารณาวิธีการใช้ libcog pkg-config ไม่รู้อะไรเกี่ยวกับ libcog
หากไม่ได้ติดตั้ง libcog นั่นคือปัญหาของคุณ มีโอกาสที่ดีที่การติดตั้ง libcog มาตรฐานจะแก้ไขปัญหาได้ คุณอาจต้องติดตั้งแพคเกจ "นักพัฒนา" รุ่นเพิ่มเติมทั้งนี้ขึ้นอยู่กับระบบของคุณ มันมักจะมี "-devel" หรือ "-dev" ในตอนท้ายดังนั้นหากคุณติดตั้ง "libcog" คุณอาจต้องติดตั้ง "libcog-devel"
หากติดตั้ง libcog อาจไม่ได้ติดตั้งในลักษณะที่ pkg-config สามารถค้นหาได้ อาจมีไฟล์ libcog.pc อยู่ในระบบของคุณ เพื่อประโยชน์ในการโต้แย้งมันอยู่ที่ /opt/cog/lib/pkgconfig/libcog.pc ในกรณีนั้นคุณสามารถบอก pkg-config เกี่ยวกับมันได้โดยตั้งค่า PKG_CONFIG_PATH เป็นไดเร็กทอรีที่เก็บ libcog.pc ดังนั้นใน Bourne shell หรือคล้ายกัน
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/cog/lib/pkgconfig/
เมื่อดำเนินการเสร็จแล้วให้เรียกใช้คำสั่งที่ล้มเหลวอีกครั้งเพื่อหวังว่าจะได้ผล
หากติดตั้ง libcog รวมถึงไลบรารีและไฟล์ส่วนหัวและคุณไม่มีไฟล์ libcog.pc สิ่งต่าง ๆ ก็จะแย่ลง สันนิษฐานว่าการติดตั้งมาตรฐานของ libcog จะรวมถึงข้อมูลมิฉะนั้น Widget จะไม่พึ่งพา ฉันจะตรวจสอบการติดตั้ง libcog อีกครั้ง เป็นไปได้ที่จะสร้างไฟล์ libcog.pc ด้วยตนเอง แต่การทำให้ถูกต้องนั้นเป็นเรื่องยากและเฉพาะเจาะจงกับไลบรารีที่กำหนด
ฉันดู man-page บนระบบ 64 บิตของฉันและสับสนเล็กน้อย มันพูดในบรรทัดเดียว:
pkg-config ดึงข้อมูลเกี่ยวกับแพ็กเกจจากไฟล์ข้อมูลเมตาพิเศษ ไฟล์เหล่านี้ตั้งชื่อตามแพ็คเกจที่มีนามสกุล. pc โดยค่าเริ่มต้น pkg-config จะค้นหาในคำนำหน้าไดเร็กตอรี่ / lib / pkgconfig สำหรับไฟล์เหล่านี้; มันจะดูในรายการที่คั่นด้วยโคลอน (บน Windows, คั่นด้วยเครื่องหมายอัฒภาค) ของไดเรกทอรีที่ระบุโดยตัวแปรสภาพแวดล้อม PKG_CONFIG_PATH
ฉันสันนิษฐานว่ามันดูในไดเรกทอรี lib / pkgconfig เปิดออกไดเรกทอรีของตัวเอง ในกรณีของฉันฉันพยายามรวบรวม gtk hello world tutorial ฉันค้นหาไฟล์ที่ต้องการเช่น
locate gtk | grep '\.pc'
ท่ามกลางผลลัพธ์คือ:
/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc
ในที่สุดก็ทำการส่งออก
export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/
man
หน้านี้มีการปรับให้ใหญ่เกินไปสำหรับระบบที่มีความสามารถหลายสถาปัตยกรรมที่ทันสมัย ฉันสับสนไปซักพักเพราะใน Debian 8 x86 pkg-config
ดูแล้วในโฟลเดอร์ x86_64 (ไม่มีอะไรPKG_CONFIG_PATH
) ฉันไม่แน่ใจว่าวิธีการนี้ถูกรวมเข้าด้วยกัน แต่บรรทัดคำสั่งเพื่อตรวจสอบสิ่งที่แสดงโดย @GrandAdmiral บ่งบอกว่ามันถูกควบคุมโดย--variable pc_path
ชุดนั้น (อย่างใด!) สำหรับpkg-config
แพคเกจของตัวเอง
สำหรับฉันดูเหมือนว่าคำตอบส่วนใหญ่มีข้อมูลมากเกินความต้องการ
ซอฟต์แวร์ที่หนึ่งติดตั้งอาจ (และโดยปกติ) พึ่งพาบางไลบรารีและ / หรือส่วนหัวและระบบใช้ pkg-config เพื่อค้นหา
กล่าวว่าดังนั้นpkg-config
มองหาไฟล์นี้ในไดเรกทอรีของระบบที่กำหนดไว้ล่วงหน้า (ค่าเริ่มต้น) โฟลเดอร์เหล่านั้นคือ "คำนำหน้า" เช่นห้องสมุดที่มีคำนำหน้า/usr/local
คาดว่าจะมีส่วนหัว/usr/local/include
และห้องสมุดเองจะเข้า/usr/local/lib
มา
pkg-configแต่มองหาห้องสมุดยังอยู่ในไดเรกทอรีระบุไว้ในตัวแปรสภาพแวดล้อมPKG_CONFIG_PATH
จากนั้นหากคุณติดตั้งซอฟต์แวร์นอกรายการเริ่มต้นของโฟลเดอร์ที่คุณต้อง "ปรับ" รายการคือเพิ่มไดเรกทอรีของคุณเพื่อ PKG_CONFIG_PATH
$ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:<your-directory>
PKG_CONFIG_PATH
ระบุไดเรกทอรีเพิ่มเติมในการที่จะค้นหาเฉพาะ yourPkg.pc
( pkg-config
สเปค) ไฟล์ ไม่ส่งผลกระทบต่อสิ่งเฉพาะ pkg เช่นไดเร็กทอรีการค้นหาไลบรารี
หมายความว่าคุณกำลังพยายามสร้างบางสิ่งจากแหล่งที่มาและไม่พบการพึ่งพาทั้งหมดที่ต้องการ pkg-config
สคริปต์ที่ใช้ในการค้นหาไฟล์ที่พัฒนาสำหรับไลบรารีเหล่านั้นแสดงข้อความนี้
ฉันพยายามติดตั้งแอ็กเซิลรุ่นล่าสุดและฉันวิ่ง./configure
และฉันได้รับสิ่งนี้:
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.
ดังนั้นฉันจึงพยายาม:
$ pkg-config --cflags openssl
และฉันได้รับ:
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
เห็นได้ชัดว่าฉันได้ติดตั้ง openssl ( sudo apt-get install openssl
) แต่ในผลลัพธ์ข้างต้นตามที่คุณเห็นมันระบุว่า "ไม่พบแพ็คเกจ 'openssl'" ดังนั้นเพื่อให้แน่ใจว่าฉันทำ:
find / -type f -name "*.pc" |& grep -iv permission | grep openssl
กลับกลายเป็นว่าฉันต้องการแพคเกจอื่น ๆ อย่างแน่นอนดังนั้น googling เล็กน้อยและฉันพบว่าฉันต้องติดตั้งแพคเกจนี้:
sudo apt-get install libssl-dev
และทั้งหมดนี้ไม่เกี่ยวอะไรกับการเปลี่ยนตัวแปร pkg-config env
ผู้ที่ใช้https://github.com/confluentinc/confluent-kafka-go
โปรดปฏิบัติตามlibrdkafka การติดตั้ง
ตอนนี้คุณสามารถใช้ go install / go run go build ได้แล้ว