ดูเหมือนว่าปัญหาจะเกิดขึ้นจริงกับวิธีการกำหนดค่าสคริปต์สำหรับ 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 .:
- ทำไมลำดับของตัวเลือก '-l' ใน gcc สำคัญ?
 
               
              
liburlmatch.*ใน/usr/lib?