为什么Linux下的GCC不会出现“未定义的引用 `__gcov_xxx`”(而Windows下的GCC会出现)?
在Linux上:
$ echo 'void f(void){}' | gcc -xc - --coverage -fPIC -c -o x.o && gcc -shared x.o
$ gcc --version
gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
在Windows(Cygwin)上:
$ echo 'void f(void){}' | gcc -xc - --coverage -fPIC -c -o x.o && gcc -shared x.o
/usr/lib/gcc/x86_64-pc-cygwin/13/../../../../x86_64-pc-cygwin/bin/ld: x.o:<stdin>:(.text+0x2c): undefined reference to `__gcov_init'
/usr/lib/gcc/x86_64-pc-cygwin/13/../../../../x86_64-pc-cygwin/bin/ld: x.o:<stdin>:(.text+0x40): undefined reference to `__gcov_exit'
/usr/lib/gcc/x86_64-pc-cygwin/13/../../../../x86_64-pc-cygwin/bin/ld: x.o:<stdin>:(.data+0x60): undefined reference to `__gcov_merge_add'
collect2: error: ld returned 1 exit status
$ gcc --version
gcc (GCC) 13.4.0
为什么Linux上的GCC不会产生 undefined reference to `__gcov_xxx'(而Windows上的GCC会?)
或者换句话说:为什么Windows上的GCC会产生 undefined reference to `__gcov_xxx'(而Linux上的GCC不会?)
解决方案
部分来自用户Brecht Sanders的回答(https://stackoverflow.com/a/68175407/1778275):
另外,在Windows上你不能构建带有未解析符号的共享库 (.dll) 或可执行文件 (.exe)。所谓“DLL地狱”的一部分原因是你必须确保所有符号都被解析。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。