gcc - 外部变量未定义但编译器没有错误
问题描述
我正在编译我的 .so 库代码并遇到了一个奇怪的问题。在一个头文件中,我已经清除了一个变量 extern,该变量包含在其他 .c 文件中,并且没有在任何地方定义。代码编译得很好,在运行时它会出错。为什么编译时没有错误或警告?我正在使用 gcc 9。
解决方案
在命令行上使用-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
推荐阅读
- python - 使用常量值初始化输入层时遇到问题
- java - 更新后来自 javax.mail 的重复警告跟踪
- html - 调整窗口大小时使文本框低于图像
- hdfs - Vertica HDFS 作为外部表
- javascript - 当我只使用一个图像查询时,为什么我会收到 GraphQL 的重复定义错误?
- c++ - 为什么将 uint8_t 读取为十六进制不能按预期工作?
- synchronization - VHDL 多进程
- azure-cosmosdb - ComsosDB 索引。我应该排除它吗
- regex - JavaFX - 带有正则表达式的邮政编码文本字段
- excel - 如何随着代码的进展更新用户表单内容