У меня есть простой проект 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, если мне удастся заставить ее вообще собираться.
Любые предложения приветствуются.Спасибо всем заранее.