Неопределенная ссылка при компиляции и компоновке в два этапа - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь создать статическую библиотеку, которую я могу включить в проект 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.Могут ли отдельные файлы заголовков вызывать эту проблему?

Что здесь происходит?Что меняется, когда я компилирую и ссылаюсь отдельно?Есть ли что-то очевидное, чего мне не хватает?

Я могу рассказать подробнее о том, какую библиотеку я собираю, и так далее, если это будет полезно.Я держал это общее, чтобы не путать.

...