Убедитесь, что все символы определены в библиотеке stati c - PullRequest
0 голосов
/ 08 января 2020

Я создал библиотеку stati c без ошибок.
Когда я попытался связать ее с каким-то приложением, я понял, что некоторые символы не определены внутри библиотеки.

Я хочу получить ошибку в библиотеке шаг построения не в приложении.

Другими словами

$ cat mylib.h
void foo();
$ cat mylib.c
#include "mylib.h"
// no foo() implementation here;
$ cat test.c 
#include "mylib.h"

int main() {
    foo();
    return 0;
}
$ gcc mylib.c -c
$ ar crf libmylib.a *.o
$ gcc test.c -lmylib -L.
/tmp/cc7201uP.o: In function `main':
test.c:(.text+0xa): undefined reference to `foo'
collect2: error: ld returned 1 exit status

Я хочу получить ошибку на одном из этих шагов

$ gcc mylib.c -c
$ ar crf libmylib.a *.o

Возможно ли это, и что такое хорошая практика для таких ситуаций?

Обновлено: Я пробовал $ nm --undefined-only *.a Вывод:

mylib.o:

Это немного странно для меня. Я ожидаю что-то вроде foo() внутри вывода.

1 Ответ

1 голос
/ 08 января 2020

Библиотека stati c - это просто набор файлов .o, которые, как ожидается, будут иметь неопределенные ссылки. При создании .a из .o файлов не требуется никаких ссылок.

Вы можете запустить nm --undefined-only libmylib.a, и в результате появится список всех неопределенных символов. Этот список будет включать все символы, которые вы используете из стандартной библиотеки C, потому что, опять же, при создании файлов .a не требуется никаких ссылок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...