GCC: указание статических / динамических библиотек для сборки - PullRequest
4 голосов
/ 13 марта 2012

У меня есть простой проект C ++, который структурирован следующим образом: -Базовый проект (т. Е. Содержит main ()) и ссылки на все остальное. - Несколько пользовательских библиотек, которые все собраны как статические библиотеки (т.е.:.файлы) --- Одна из этих статических библиотек использует функции в общем целевом файле (то есть: .so файл)

Так, например, так будет выглядеть проект (в виде дерева)во время компоновки, после того, как вся первоначальная компиляция завершена:

-myApp            (the main application)
--libaudio.a      (the audio library I made)
--libnetwork.a    (the networking library I made)
--libvideo.a      (the video library I made)
--libboost.a      (boost library)

Первоначально этот проект компоновался просто отлично.Мне просто нужно было убедиться, что в моём make-файле была простая строка:

LIBS+=audio network video

Недавно мне пришлось изменить работу моей аудио-библиотеки.Теперь мне необходимо использовать стороннюю библиотеку, и все, что у меня есть, это файл заголовка (.h) и файлы общего объекта (.so).Таким образом, новая структура во время компоновки выглядит так:

-myApp              (the main application)
--libaudio.a        (the audio library I made)
---libthirdparty.so (contains third-party audio handling functions)
--libnetwork.a      (the networking library I made)
--libvideo.a        (the video library I made)
--libboost.a        (boost library)

Это, по сути, означает, что у меня есть приложение со связанной статической библиотекой, которое выполняет вызовы внешнего общего объекта.Итак, я поместил заголовочный файл в соответствующее место, чтобы у меня не было ошибок сборки при компиляции libaudio.a, и помещаю файл libthirdparty.so в место, где компоновщик ищет все мои установленные библиотеки.

На данный момент я не могу получить вещь для сборки.Он просто не видит файл libthirdparty.so, хотя я знаю, что он находится в местоположении, которое компоновщик ищет по умолчанию.По какой-то причине обертывание моего кода libaudio, как в примере ниже (позаимствовано с www.cplusplus.com), исправляет ошибку сборки:

my_C_CPP_Header.h:
#ifndef MY_C_CPP_HEADER
#define MY_C_CPP_HEADER

/*check if the compiler is of C++*/
#ifdef __cplusplus
extern "C" {
int myOtherCfunc(int arg1, int arg2); /* a C function */
}
#endif

void myCppFunction1(); /* C++ function */
void myCppFunction2(); /* C++ function */

/*check if the compiler is of C++ */
#ifdef __cplusplus
}
#endif

#endif

Теперь у меня возникла новая проблема.Теперь, когда он собирается, он больше не статически связывается в libboost.a, а вместо этого падает при запуске из-за отсутствия libboost.so.Так что, каким-то образом эта установка нарушает компиляцию libboost, если мне удастся заставить ее вообще собираться.

Любые предложения приветствуются.Спасибо всем заранее.

1 Ответ

2 голосов
/ 16 марта 2012

В конце, вместо оператора "LIBPATH + =", переопределяющего пути включения в библиотеку, был оператор "LIBPATH =". Решено.

Спасибо всем за помощь.

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