В моем проекте две библиотеки и одна программа.
Lib1.c
и Lib1.h
- это два файла первой библиотеки (Lib1.so
). Lib2.c
и Lib2.h
- два файла второй библиотеки (Lib2.so
). prog.c
- основной файл программы (prog
).
Программа (prog
) связан только со второй библиотекой (Lib2.so
), а вторая библиотека (Lib2.so
) связана с первой библиотекой (Lib1.so
).
В Lib1.c
, I есть объявление глобальной переменной (int var = 0;
) и в Lib1.h
, у меня есть объявление (extern int var;
).
В Lib2.h
, у меня есть объявление (extern int var;
), чтобы используйте переменную var
в основной программе.
В функции main()
я включаю Lib2.h
в prog.c
файл и у меня есть объявление (var = 5;
)
Lib1. c:
#include <stdio.h>
#include "Lib1.h"
int var = 0;
int funct(void)
{
printf("hello world \n");
return 0;
}
Lib1.h:
extern int var;
int funct(void);
Lib2. c:
#include <stdio.h>
#include "Lib2.h"
int funct2(void)
{
printf("Library 2 \n");
funct();
return 0;
}
Lib2.h:
#include "Lib1.h"
extern int var;
int funct2(void);
prog. c:
#include <stdio.h>
#include "Lib2.h"
int main()
{
var = 5;
printf("===>var=%d\n", var);
funct2();
return 1;
}
Команды:
gcc -c -Wall -Werror -fpic Lib1.c
gcc -shared -o Lib1.so Lib1.o
gcc -c -Wall -Werror -fpic Lib2.c
gcc -shared -o Lib2.so Lib2.o -ldl /home/test/Lib1.so
gcc prog.c -o prog -ldl /home/test/Lib2.so
Когда я пытаюсь скомпилировать программу (prog.c
), я получаю сообщение об ошибке Шаг ссылки, как показано ниже.
/usr/bin/ld: /tmp/ccKaq16a.o: undefined reference to symbol 'var'
/home/test/Lib1.so: error adding symbols: DSO missing from command line
Есть ли способ использовать переменную var в основной функции, если она определена в первой библиотеке?