extern变量未定义,但编译器没有错误

问题描述

我正在编译我的.so库代码,遇到一个奇怪的问题。 在一个头文件中,我清除了一个变量extern,该变量extern包含在其他.c文件中,并且未在任何位置定义。 代码可以很好地编译,而在运行时会出错。 为什么在编译时没有错误或警告? 我正在使用gcc 9。

解决方法

使用-Wl,--no-undefined 在命令行上指定函数来自的库。例如,如果库x使用库y中定义的函数:

gcc -shared -o libx.so x.c                        # OK
gcc -shared -o libx.so x.c -Wl,--no-undefined     # undefined symbols from lib y
gcc -shared -o libx.so x.c -ly -Wl,--no-undefined # OK again

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...