当静态库 (lib.a) 同时具有未定义和已定义的引用时,编译显示未定义引用的 C 代码

compilation of C code showing undefined references when static library (lib.a) has both undefined and defined references

提问人:user3063547 提问时间:4/13/2020 最后编辑:Progmanuser3063547 更新时间:4/13/2020 访问量:51

问:

我正在编译 C 代码,它在链接阶段因一些未定义的引用而停止。当我将 lib.a 文件分解为单独的目标文件时,我看到 *.o 文件包含特定函数的未定义值和已定义值(通过“nm *.o”)。从理论上讲,我可以逐步浏览每个 *.o 文件并删除具有函数未定义值的文件,然后重新构建 lib.a 文件,但这似乎是一种非常尴尬的做事方式。我一定在这里遗漏了什么......

--史蒂夫

c 静态库 未定义引用

评论

0赞 rici 4/13/2020
您是否与多个库链接?静态还是动态?请在您的问题中添加尽可能多的详细信息。
0赞 Jonathan Leffler 4/13/2020
您需要显示有关问题的更多信息。这里没有足够的人来帮助你。该库通常只调用本身的函数,或者调用您在命令行上列出的更基本的库中的函数。此类辅助库将列在您正在使用的库的文档中。
0赞 user3063547 4/13/2020
我只是试图在这里复制粘贴代码,但用完了 640 个字符的空间!有没有办法格式化代码来解决这个问题?除此之外,LDPATH=-L...指向包含静态和动态库的 lib 路径。我正在尝试静态编译和链接这个二进制文件,以便它可以在移动设备上运行。
0赞 Jonathan Leffler 4/13/2020
我希望一个问题的限制是大约 30k 个字符——除非这是答案的限制(我认为这是一样的,但我以前错了)。处理一个未定义的引用 — 它是从您的代码中调用的,还是从您需要使用的库中的对象文件调用的(因为您的代码引用了该对象文件中的其他符号)?它调用的函数应该在哪里(应该在哪里定义缺少的引用)?
0赞 user3063547 4/13/2020
代码正在调用静态库中的符号。静态库中的一个对象文件将符号设置为未定义。静态库中的另一个对象文件具有定义的符号(符号 T)。因此,我目前对为什么会发生这种情况感到困惑。

答: 暂无答案