Создание общей библиотеки в C - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь создать общую библиотеку в C со следующей структурой файла.

В func1.h

#ifndef INCLUDE_FUNC1_H_
#define INCLUDE_FUNC1_H_

void function1();

#endif

В func1.c

#include "func1.h"

void function1() {
    //do function 1
}

В func2.h

#ifndef INCLUDE_FUNC2_H_
#define INCLUDE_FUNC2_H_

void function2();

#endif

В func2.c

#include "func2.h"

void function2() {
    //do function 2
}

Теперь, чтобы избежать необходимости включать несколько заголовочных файлов, я хочу общий заголовочный файл commonheader.h, который включает другие заголовочные файлы.

#ifndef INCLUDE_COMMONHEADER_H_
#define INCLUDE_COMMONHEADER_H_

#include "func1.h"
#include "func2.h"

#endif

Затем я скомпилировал их в общую библиотеку.

gcc -c -fPIC -o func1.o func1.c
gcc -c -fPIC -o func2.o func2.c
gcc -shared -o libcommonheader.so *.o

Теперь я пытаюсь использовать созданную общую библиотеку. test.c выглядит так,

#include "commonheader.h"
int main () {
    function1();
}

Я пытался скомпилировать это,

gcc -L. -I. -Wall -o test test.c -lcommonheader

Однако он возвращает с ошибкой неопределенную ссылку на `function1 '.

Что я здесь не так делаю?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Решена проблема, проблема была с глобальной переменной, которая была объявлена ​​неправильно.

0 голосов
/ 16 мая 2018

У вас есть простая опечатка: ваши функции называются function*, а не func*.

Обратите внимание, что с -Wall (что вы упомянули) вы должны увидеть следующее предупреждение, которое указывает на проблему (по крайней мере, с gcc >= 4.8):

test.c: In function ‘main’:
test.c:3:5: warning: implicit declaration of function ‘func1’; did you mean ‘function1’? [-Wimplicit-function-declaration]
     func1();
     ^~~~~
     function1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...