问题描述
我正在编译我的.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