Gcc 外部变量未定义,但编译器没有错误

Gcc 外部变量未定义,但编译器没有错误,gcc,linker-errors,extern,gcc-warning,linker-flags,Gcc,Linker Errors,Extern,Gcc Warning,Linker Flags,我正在编译我的.so库代码,遇到了一个奇怪的问题。 在头文件的其中一个文件中,我已经清除了另一个.c文件中包含的变量extern,并且没有在任何地方定义它。 代码编译得很好,运行时会出现错误。 为什么编译时没有错误或警告? 我使用的是gcc 9。使用-Wl,--no未定义的,并在命令行上指定函数来自的库。例如,如果库x使用库y中定义的函数: gcc -shared -o libx.so x.c # OK gcc -shared -o libx.so

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

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

请附上一份。请发布一个包含所有必要源代码的简单示例,并发布您正在执行的gcc命令。我认为链接时会报告错误-Wl,--在构建共享库时不能使用未定义的链接器选项,未定义的符号将被报告为错误。但问题是,我的库包含其他动态库头并使用了许多函数,如果我使用此链接器标志“-Wl,-no undefined”,所有这些函数也将报告为未定义。有任何解决方案可以帮助吗?