外部变量未定义但编译器没有错误
extern variable not define but no error from compiler
我在编译我的 .so 库代码时遇到了一个奇怪的问题。
在一个头文件中,我已经清除了一个包含在其他 .c 文件中但未在任何地方定义的变量 extern。
代码编译正常,但在运行时会出错。
为什么在编译时没有错误或警告?
我正在使用 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
我在编译我的 .so 库代码时遇到了一个奇怪的问题。 在一个头文件中,我已经清除了一个包含在其他 .c 文件中但未在任何地方定义的变量 extern。 代码编译正常,但在运行时会出错。 为什么在编译时没有错误或警告? 我正在使用 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