分两步进行编译和链接时未定义的引用

问题描述 投票:-1回答:1

我正在尝试构建可包含在Kotlin / Native项目中的静态库。 Kotlin / Native构建过程确实分两个步骤进行编译和链接,并且链接步骤始终会因未定义的引用而失败。

为了确保这不是我构建的库的问题,我编写了一个小的test.c文件来检查是否遇到相同的错误。

#include "../library_header.h"

int main()
{
    libraryFunction();
}

当我将链接和编译步骤与gcc结合在一起时,上面的命令运行得很好:

$ gcc test.c -I/usr/include -L../library -llibrary -L/usr/lib -lm -ldl -lstdc++

但是如果我拆分编译和链接步骤,则会收到未定义的引用错误:

$ gcc -c test.c -I/usr/include
$ ld test.o -L../library -llibrary -L/usr/lib -lm -ldl -lstdc++
ld: warning: cannot find entry symbol _start; defaulting to 0000000000401000
ld: test.o: in function `main':
test.c:(.text+0xa): undefined reference to `libraryFunction'

导致未定义引用的函数在不是主库头文件的头文件中定义,但是实现这些定义的目标文件在同一liblibrary.a文件中。单独的头文件是否可能导致此问题?

这里发生了什么?分别编译和链接时会有什么变化?有什么明显的我想念的地方吗?

如果有帮助,我可以提供有关正在构建的库的更多详细信息,依此类推。为了避免混淆,我将其保留为通用名称。

c gcc static-linking
1个回答
0
投票

您忘记了第二次链接库(-llibrary)。

© www.soinside.com 2019 - 2024. All rights reserved.