【发布时间】:2021-08-11 20:56:35
【问题描述】:
一个相对较大的项目正在使用许多对象(主要来自 C 文件)来创建多个可执行文件和动态库。例如,其中一个文件 (gxdb.c) 创建了一个名为 gxdbkq 的函数,它(在目标文件的详细信息中)显示为:
...
00000000000007b0 T gxdbkq
...
但是,当我检查共享库时,该函数已变为未定义:
...
U gxdbkq
...
问题可能在链接阶段,但我什至不知道如何开始解决这个问题。
【问题讨论】:
-
请构造一个minimal reproducible example。也就是说,编写少量代码,显示用于将其构建到 lib 中的确切命令,最后显示生成的符号。
-
配置执行程序创建一个将近 1,000 行长的 Makefile 和一个接近 12,000 行的 libtool。我不知道如何隔离问题,因为许多其他函数似乎编译正常。
-
代码可以从cola.gmu.edu/grads下载。
-
你有尝试过吗?查看构建日志,提取最终构建命令并提出一个小代码示例来尝试单独重现问题。这么少的信息很难提供帮助。
-
我知道这是一个艰难的过程,但我希望有人遇到过类似的事情,并且可以提供一些启示。配置日志没有提供太多信息,因为从操作系统的角度来看,一切都是成功构建的(问题是某些函数由于某种原因在库中变得未定义)。