gpt4 book ai didi

gcc - "Hidden symbol ` atexit ' is referenced by DSO"将 libtool 与 gcov 一起使用时

转载 作者:太空宇宙 更新时间:2023-11-03 16:43:44 24 4
gpt4 key购买 nike

我有一个 C++ 项目,它使用 GNU Autotools 作为其构建脚本并使用 libtool 进行链接。最近,我通过确保

GCOV_CFLAGS="-fprofile-arcs -ftest-coverage"
GCOV_LDFLAGS="-fprofile-arcs -ftest-coverage"

..分别包含在我的 CFLAGSLDFLAGS 中。在 OS X 10.7.4 上使用 g++-4.2(由自制软件安装),一切正常。

在使用 g++ 4.6.3 的 Ubuntu 12.04 上,libtool 无法链接我的测试之一:

/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

如何在 ubuntu/g++ 4.6 上修复我的构建?

最佳答案

谷歌搜索后我看到 this thread ,建议添加 --coverageCXXFLAGS运行时 ./configure .事实上,虽然它对那张海报不起作用,但它对我有用:

./configure CXXFLAGS="--coverage"

但是这个变量是为包安装程序保留的,而不是维护者(我)。问题简化为“我如何将它正确地合并到构建中?”

以下是还不够的地方:

GCOV_CFLAGS="-fprofile-arcs -ftest-coverage --coverage"
GCOV_LDFLAGS="-fprofile-arcs -ftest-coverage"

假设GCOV_CFLAGS包含在有效 CXXFLAGS 中(未显示,但确实如此),看来此修复应该有效。它没有。

进一步挖掘,如果我们放弃 CXXFLAGS="--coverage",似乎我们至少应该得到一些牵引力从命令行并将其放在 configure.ac 中某处。这实际上也不起作用,除非该行位于 AC_PROG_CXX 之上选择编译器的调用。

所以现在我们获得了一点洞察力。 AC_PROG_CXX当它看到 --coverage 时正在改变某些东西,这很可能是为什么放置在 GCOV_CFLAGS 中的原因没有用:为时已晚。

仔细查看日志,秘诀似乎是自动包含 -lgcov在失败的链接步骤中。我不确定这个库是否需要保密,但如果我这样更改我的变量:

GCOV_CFLAGS="-fprofile-arcs -ftest-coverage --coverage"
GCOV_LDFLAGS="-fprofile-arcs -ftest-coverage"
GCOV_LIBS="-lgcov"

..并确保GCOV_LIBS包含在 LIBS 中,然后一切正常,在我的所有平台上。

编辑:另见this thread .

关于gcc - "Hidden symbol ` atexit ' is referenced by DSO"将 libtool 与 gcov 一起使用时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11703709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com