同一套代码,使用cmake生成makefile进行编译链接,分别在ubuntu和centos上编译;
在ubuntu上编译出的可执行文件,执行单元测试报错,原因是部分声明为weak的函数未被替换,需要的函数所在的动态库未被可执行文件链接;但是在centos上却没有这个问题。
ubuntu上gcc的版本信息:
gcc (Ubuntu 8.4.0-7ubuntu3) 8.4.0
Copyright (C) 2018 Free Software Foundation, Inc.
centos上gcc的版本信息:
gcc (GCC) 8.4.1 20200928 (Red Hat 8.4.1-1)
Copyright © 2018 Free Software Foundation, Inc.
通过ldd指令查看生成的可执行文件发现,ubuntu上生成的文件未链接真函数所在的动态库;
通过gdb也能得到相同的情况,执行的函数指向被声明为weak的函数的位置。
看起来像是系统环境问题。