tham chiếu không xác định đến ký hiệu 'exp @@ GLIBC_2.2.5'


11

Câu hỏi tương tự đã được hỏi ở đây nhưng chưa được trả lời.

Tôi có một triển khai Levenberg-Marquardt(được tải xuống từ một nơi nào đó) và tôi đang cố gắng biên dịch nó nhưng gặp lỗi sau.

gauravloj@vertex:~/Documents/source_code/non-rigid_registration/Gauss_newton/levmar-2.6$ make
[ 87%] Built target levmar
Linking C executable lmdemo
/usr/bin/ld: CMakeFiles/lmdemo.dir/lmdemo.c.o: undefined reference to symbol 'exp@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libm.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [lmdemo] Error 1
make[1]: *** [CMakeFiles/lmdemo.dir/all] Error 2
make: *** [all] Error 2

Tại nhiều trang web, giải pháp được đưa ra là thêm một số cờ (ví dụ ở đâyđây ). Nhưng không ai trong số họ làm việc cho tôi.

Đây là Makefile, đây là CMakeLists.txt và đây là CMakeCache.txt.


Phiên bản glibc của bạn là gì?
nixeagle

ldd --versionđã cho (Ubuntu EGLIBC 2.19-0ubuntu6.3) 2.19.
Shashwat

Vui lòng bao gồm Makefile của bạn. Đây rõ ràng là một cái gì đó với các phụ thuộc thư viện bị hỏng (và phiên bản glib có thể không phù hợp).
nixeagle

2
Bạn có chắc chắn đã thử thêm -lm? Bạn đã thêm nó ở đâu?
muru

@Shashwat: Chính xác thì bạn đã thêm cái này ở đâu? Bạn có thể xin vui lòng gửi mã? Cảm ơn

Câu trả lời:


8

Có vẻ như người dùng đã tìm thấy giải pháp không bao giờ chia sẻ nó sau này. Đối với những người đang cố gắng tìm giải pháp, chỉ cần thêm thư viện toán học một cách rõ ràng và cũng thêm-ldl

Vì vậy -lm, -ldltrong gccdòng bạn đang biên dịch và nó sẽ hoạt động tốt.

Ngoài ra, trong hầu hết các trường hợp, bạn cũng có thể xác định rõ ràng CFLAGSvà giảm bớt vấn đề theo cách đó. Đây chỉ là hai cách giải quyết,

Thí dụ:

user@compiler-shell$ EXPORT CFLAGS=" -g -O2 -lm -ldl -Wall -Wpointer-arith -finline-functions -ffast-math -funroll-all-loops";

6

Tôi đã thêm -lmvào CMakeLists.txtnơi thư viện đang được chỉ định. Nó đang làm việc bây giờ.


4
Bạn có thể hiển thị các bổ sung chi tiết? Cảm ơn bạn
Lucio

3

Tôi tìm thấy chủ đề này với một vấn đề tương tự. Rõ ràng, giải pháp là tìm và thay đổi tệp CMakeLists.txt của bạn:

TARGET_LINK_LIBRARIES(lmdemo ${LIBS})

đến

TARGET_LINK_LIBRARIES(lmdemo -lm ${LIBS})
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.