提问人:Photonslave 提问时间:4/7/2023 最后编辑:Photonslave 更新时间:4/7/2023 访问量:142
对写入新文件的函数的“未定义引用”上的链接器错误,但在将相同函数添加到现有文件时工作正常
Linker error on "Undefined reference" to functions written a new file, but works fine when same functions are added to existing file
问:
我有一个带有外部子模块 SUB 的项目 PROJ。该子模块调用了一些未在我们的项目中定义的外部函数 f1()、f2()、f3(),因此链接器失败,并带有对这些函数的“未定义引用”。我们的项目不需要这些功能。但是我不能注释掉这些函数调用,因为我不允许对调用它们的外部子模块进行更改。因此,我为函数 f1()、f2()、f3() 添加了一个存根(虚拟)实现。
我最初将存根添加到现有的 C 源文件 common_lib.c 中,链接器对此很满意。但是我需要在新文件 stub_lib.c 中定义所有存根。但是,当我这样做时,链接器再次出现“未定义的引用”错误。common_lib 和 stub_lib 都被编译为同一个存档文件 liball.a 的一部分,我使用“nm”确认函数定义在 liball.a 中
为什么链接者还在抱怨?
这是我尝试过的事情:
- 将存根函数添加到现有的 C 源文件(有效),而不是写入新文件
- 确保新的 C 源文件 stub_lib.c 包含在编译中并添加到存档文件中
- 已使用 nm 确保函数定义位于存档文件中
- 将函数定义保留在 stub_lib.c 和 common_lib.c 中,看看会发生什么。存档文件输出显示函数在两个 .o 文件中都定义,但链接器不会抱怨多个定义,并且由于 common_lib.c 中定义的函数,它链接正常
stub_lib.c.o:
0000000000000043 T f1
0000000000000064 T f2
0000000000000088 T f3
common_lib.c.o:
0000000000000286 T f1
000000000000002a7 T f2
00000000000002cb T f3
答: 暂无答案
评论