ดูเหมือนว่าปัญหาจะเกิดขึ้นจริงกับวิธีการกำหนดค่าสคริปต์สำหรับ 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
?