Tôi có một dự án C++ sử dụng GNU Autotools cho các kịch bản xây dựng và libtool để liên kết. Gần đây tôi đã thêm mã vùng phủ sóng thiết bị đo đạc với gcov, bằng cách đảm bảo rằng"Biểu tượng ẩn` atexit 'được tham chiếu bởi DSO "khi sử dụng libtool với gcov
GCOV_CFLAGS="-fprofile-arcs -ftest-coverage"
GCOV_LDFLAGS="-fprofile-arcs -ftest-coverage"
..get trong CFLAGS
tôi và LDFLAGS
tương ứng. Trên OS X 10.7.4 sử dụng g ++ - 4.2 (được cài đặt bởi homebrew), mọi thứ hoạt động tốt.
Trên Ubuntu 12.04 sử dụng g ++ 4.6.3, libtool thất bại trong việc liên kết một trong những thử nghiệm của tôi:
/bin/bash ./libtool --tag=CXX --mode=link g++ -Wall -Wextra -Werror -ansi -fprofile-arcs -ftest-coverage -g -O0 -fprofile-arcs -ftest-coverage -L/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib -o myproj/inttests/locale_test myproj/inttests/locale_test.o myproj/app/libapp.la -lboost_thread-mt -lboost_system-mt -pthread -llog4cplus
libtool: link: g++ -Wall -Wextra -Werror -ansi -fprofile-arcs -ftest-coverage -g -O0 -fprofile-arcs -ftest-coverage -Wl,-rpath -Wl,/usr/local/lib -o myproj/inttests/.libs/locale_test myproj/inttests/locale_test.o -pthread -L/usr/local/lib myproj/app/.libs/libapp.so -lboost_thread-mt -lboost_system-mt /usr/lib/liblog4cplus.so -pthread
/usr/bin/ld: myproj/inttests/.libs/locale_test: hidden symbol `atexit' in /usr/lib/x86_64-linux-gnu/libc_nonshared.a(atexit.oS) is referenced by DSO
/usr/bin/ld: final link failed: Bad value
collect2: ld returned 1 exit status
make[2]: *** [myproj/inttests/locale_test] Error 1
Làm thế nào để sửa chữa xây dựng của tôi trên ubuntu/g ++ 4.6?
Bạn có làm việc thủ công các GCOV * vars này thành các biến khác hoặc chúng tự động được đưa vào không? Nếu bạn đặt chúng vào người khác theo cách thủ công, bạn đặt chúng vào đâu? – dbeer
Thực ra, có vẻ như phiên bản hiện tại của tập lệnh của tôi vẫn là một điều thứ ba. Xem nhanh https://github.com/phs/sauce/blob/master/Makefile.am (xem 'configure.ac' cho' GCOV_ENABLED') – phs
Nhận xét này được đưa ra bởi Bộ phận Dự phòng. '--coverage' tương đương với' -fprofile-arcs -ftest-coverage' trong khi biên dịch và '-lgcov' trong khi liên kết. – Bulletmagnet