Я хочу использовать общую библиотеку в общей библиотеке, но г ++ жалуется ...Использование разделяемой библиотеки в общей библиотеке
Вот как мой тестовый образец выглядит:
.
├── extA
│ ├── a.cpp
│ ├── a.h
│ └── libA.so
├── extB
│ ├── b.cpp
│ ├── b.h
│ └── libB.so
└── main.cpp
ах:
#pragma once
int f(void);
a.cpp:
#include "a.h"
int f(void) {
return 42;
}
b.h:
#pragma once
#include "a.h"
int g(void);
b.cpp:
#include "b.h"
int g(void) {
return f();
}
main.cpp:
#include <cstdlib>
#include <iostream>
#include "b.h"
int main(int, char **) {
std::cout << g() << std::endl;
return EXIT_SUCCESS;
}
Я уверен, что мой способ компиляции неправильно. Это то, что я делаю:
g++ -c -fpic a.cpp
g++ -shared -o libA.so a.o
создать libA.so,
g++ -c -fpic -I../extA b.cpp -L../extA -lA
g++ -shared -o libB.so b.o
создать libB.so (я думаю, что этот путь является неправильным), и, наконец:
g++ -IexB main.cpp -LextB -lB -o main
В последний g ++ - вызов приводит к ошибке. msg:
In file included from main.cpp:4:0:
extB/b.h:3:15: fatal error: a.h: No such file or directory
#include "a.h"
^
compilation terminated.
Может ли кто-нибудь сказать мне, что это правильный способ скомпилировать/создать libB.so?