C ++ статическая библиотека ссылка с общей библиотекой. Компиляция будет в порядке? - PullRequest
0 голосов
/ 17 декабря 2009

Вот проект C ++, и его зависимость от lib равна

Hello.exe 
   -> A.so 
   -> B.a
B.a 
  -> A.so

Hello.exe зависит от B.a и A.so, а B.a зависит от A.so. Компилятор GCC свяжет Hello.exe успешно?

И если в Ba есть файл b.cc, который включает в себя заголовочный файл ah из A.so, а также использует некоторые интерфейсы A.so, то с правильной настройкой пути «include» компиляция b.cc в bo должен быть успешным. Но если бы в качестве входных данных не было указано A.so, ссылка B.a была бы ошибочной, верно?

gcc -c b.cc -I../A/include ;; successful 

gcc -a B.a b.o             ;; fail

Где я могу найти подробные документы библиотеки ссылок об этих сложных ссылочных отношениях ...

Спасибо.

1 Ответ

1 голос
/ 17 декабря 2009

Статическая библиотека - это просто набор объектных файлов, созданных из скомпилированных файлов .c / .cpp. У него не может быть связей.

При компиляции Hello.exe

вам нужно будет указать зависимости ссылок для A.so и B.a.

с моей головы это будет что-то вроде

gcc -o Hello.exe B.a A.so

В качестве примечания вы должны переименовать A.so в libA.so и вместо этого сделать

gcc -o Hello.exe -lA B.a

Для прямой связи с A.so, как в примере 1, потребуется, чтобы A.so всегда находился в том же каталоге, что и Hello.exe

Если вы используете пример 2, вы можете поместить libA.so куда угодно и использовать LD_LIBRARY_PATH, чтобы указать на правильный каталог.

...