Fifth Browser - ฉันจะรับสคริปต์กำหนดค่าเพื่อให้รู้จักการพึ่งพาได้อย่างไร


0

ฉันพยายามติดตั้ง Fifth Browser ( เว็บไซต์ ) ( ลิงค์ github ) บน Xubuntu 16.04.2 LTS

ฉันสามารถรับการอ้างอิงทั้งหมดผ่านทางคลังเก็บ distro อย่างเป็นทางการโดยใช้ Synaptic สำหรับการติดตั้ง หนึ่งในนั้นตามที่ระบุไว้ในหน้าแรกของที่ห้าเรียกว่า liburlmatch ( ลิงค์ github ) ดูเหมือนจะเป็นไลบรารีอย่างง่ายที่ให้คุณบล็อก URL ในขณะที่ใช้สัญลักษณ์แทน

ฉันได้ติดตั้ง urlmatch ผ่าน:
/ git clone https://github.com/clbr/urlmatch.gitจากนั้น
/ sudo checkinstall ติดตั้งในโฟลเดอร์แยกต่างหาก ดูเหมือนว่าจะทำงานได้อย่างไร้ที่ติ

เมื่อฉันทำ. / กำหนดค่าในโฟลเดอร์ที่ห้าสองสามบรรทัดสุดท้ายจะเป็นดังนี้:

checking for fltk-config13... no
checking for fltk-config... fltk-config
checking for url_init in -lurlmatch... no
configure: error: liburlmatch not found

คุณสามารถค้นหาไฟล์ส่วนหนึ่งของการกำหนดค่าที่เกี่ยวข้องกับการ urlmatch ใน Pastebin ต่อไปนี้เพื่อความสะดวกสบายของคุณ: codeblock จากการกำหนดค่าสำหรับ liburlmatch

ผมทำอะไรผิดหรือเปล่า? ทำไมสคริปต์การกำหนดค่าไม่รู้จักไลบรารี urlmatcher โปรดพิจารณาในคำตอบของคุณว่านี่เป็นความพยายามครั้งแรกของฉันในการรวบรวมโปรแกรมเช่นนี้ขอบคุณ


"ดูเหมือนจะทำงานได้อย่างไม่มีที่ติ" - คุณไม่ตรวจสอบสำหรับliburlmatch.*ใน/usr/lib?
ขับรถเหล็ก

มี liburlmatch.a (ไฟล์เก็บถาวร AR) แต่ไม่ใช่ 'shared library' เหมือนอย่างอื่น
Enteneller

คำตอบ:


1

ดูเหมือนว่าปัญหาจะเกิดขึ้นจริงกับวิธีการกำหนดค่าสคริปต์สำหรับ 5.0- ห้าสร้างและเรียกใช้ conftest สำหรับไลบรารี urlmatch

ก่อนเกิดข้อผิดพลาด

checking for url_init in -lurlmatch... no
configure: error: liburlmatch not found

กลายเป็นความเข้าใจผิดที่ค่อนข้าง: ถ้าเราดูที่config.logเราเห็นว่า conftest จริง ๆ ไม่สามารถสร้างเนื่องจากการอ้างอิงที่ไม่ได้กำหนดuncompressฟังก์ชัน:

configure:5511: checking for url_init in -lurlmatch
configure:5546: g++ -o conftest -g -O2 -pthread  -isystem /usr/include/cairo -isystem /usr/include/glib-2.0 -isystem /usr/lib/x86_64-linux-gnu/glib-2.0/include -isystem /usr/include/pixman-1 -isystem /usr/include/freetype2 -isystem /usr/include/libpng12 -isystem /usr/include/freetype2 -isystem /usr/include/cairo -isystem /usr/include/glib-2.0 -isystem /usr/lib/x86_64-linux-gnu/glib-2.0/include -isystem /usr/include/pixman-1 -isystem /usr/include/freetype2 -isystem /usr/include/libpng12 -fvisibility-inlines-hidden  -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT   -lz conftest.cpp -lurlmatch    -Wl,-Bsymbolic-functions -lfltk_images -lfltk -lX11 >&5
//usr/local/lib/liburlmatch.a(opti_init.o): In function `initbin':
opti_init.c:(.text+0xd6): undefined reference to `uncompress'
collect2: error: ld returned 1 exit status
configure:5552: $? = 1

นั่นเป็นเพราะuncompressอยู่ในlibz- ที่มีการเชื่อมโยงก่อน liburlmatch :

. . .   -lz conftest.cpp -lurlmatch -Wl,-Bsymbolic-functions -lfltk_images -lfltk -lX11 >&5

ไม่สามารถเคารพลำดับลิงก์ที่จำเป็น1สำหรับทั้งสองไลบรารี เราสามารถติดตามย้อนกลับไปยังconfigure.acไฟล์ที่configureจะสร้างสคริปต์ได้:

# Checks for libraries.
OLD_LDFLAGS=[$LDFLAGS]
LDFLAGS=["$LDFLAGS -lz"]
AC_CHECK_LIB([urlmatch], [url_init], [], AC_MSG_ERROR([liburlmatch not found]))
LDFLAGS=[$OLD_LDFLAGS]

คือแทนที่จะถูกเพิ่มเข้าไปในรายการของLIBS, -lzจะถูกเพิ่มในLDFLAGS(ซึ่งมากกว่าปกติใช้เพื่อระบุห้องสมุดเพิ่มเติมเส้นทางข้างหน้าของLIBS)

วิธีแก้ปัญหาอย่างรวดเร็ว 'คือการโทร./configureด้วยLIBSอาร์กิวเมนต์ที่ชัดเจน:

./configure "LIBS=-lz"

นี่เป็นสาเหตุที่พิเศษ-lzที่จะถูกวางไว้บนg++บรรทัดคำสั่งหลังจากurlmatchห้องสมุด (ที่หัวของอื่น ๆLIBS):

. . . -lz conftest.cpp -lurlmatch -lz -Wl,-Bsymbolic-functions -lfltk_images -lfltk -lX11 >&5

วิธีการแก้ปัญหาอย่างถาวรมากขึ้นอาจจะมีการปรับเปลี่ยนconfigure.acไฟล์ที่จะเพิ่ม-lzการLIBSแทนLDFLAGSและจากนั้นอีกครั้งสร้างconfigureโดยใช้autoconf(หรือautoreconfถ้าจำเป็น)


refs .:

  1. ทำไมลำดับของตัวเลือก '-l' ใน gcc สำคัญ?

ขอบคุณมากที่ดูรายละเอียดนี้ ฉันขอโทษที่น่ากลัวดูเหมือนว่าปัญหานี้ได้รับการแก้ไขใน Github หลังจาก tarball รุ่นล่าสุด v0.5 ฉันยังคงเรียนรู้จากการวิเคราะห์ของคุณ ขอบคุณอีกครั้ง!
Enteneller
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.