首页 > 解决方案 > 外部变量未定义但编译器没有错误

问题描述

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

标签: gcclinker-errorsexterngcc-warninglinker-flags

解决方案


在命令行上使用-Wl,--no-undefined 指定函数来自的库。例如,如果 libraryx使用 library 中定义的函数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

推荐阅读