Я создаю библиотеку для взаимодействия с рисованием файлов определенного типа. Эта библиотека должна использовать стороннюю библиотеку, чтобы выполнить некоторую обработку этого конкретного типа файла. Эта сторонняя библиотека требует от пользователей создания некоторых внешних функций, которые она использует для создания типов данных на целевом оборудовании.
Итак, это выглядит так:
----------------
| |
| 3rd Party |
| Lib |
| |
----------------
|
|
\/
---------------
| |
| My Lib |
---------------
| externs |
---------------
|
|
\/
---------------
| |
| My App |
| |
| |
---------------
Мое приложение вызывает My Lib и говорит: «Нарисуй мне файл X», My Lib делает кучу мусора, в конечном итоге вызывая стороннюю Lib и говорит «обработать файл X». 3rd Party Lib требует, чтобы было объявлено несколько внешних модулей, которые она использует.
Я сделал все эти экстерны внутри My Lib. Моя проблема в том, что когда я связываю свое приложение, оно сообщает мне неопределенные ссылки на все внешние функции. Я не могу понять, почему. Вот один из внешних элементов внутри My Lib, который будет вызываться сторонней библиотекой:
// inside typeConversions.c
extern int CreateShort(short* shortList, int numShorts)
{
int i;
for(i = 0; i < numShorts; i++)
{
BYTE_SWAP_SHORT(shortList[i]);
}
return ERROR_OK;
}
Когда я связываю свое приложение, я получаю (среди нескольких других подобных ошибок):
open.cpp: неопределенная ссылка на CreateShort
Где open.cpp находится внутри сторонней библиотеки.
У меня есть и моя библиотека, и сторонняя библиотека, включенная в мое приложение. В идеале я хочу не предоставлять пользователям My Lib доступ к сторонним библиотекам, поэтому, например, My App вообще не должен включать сторонние библиотеки, они даже не знают, что они существуют. Все, что должно быть выставлено, это My Lib. Это возможно? Кто-нибудь знает, как решить мою проблему со ссылками?