2014-02-19 4 views
-1

Я долгое время боролся с этим, и теперь мне действительно нужно понять это. Проблема довольно проста. У меня есть библиотека L, которая зависит от другой библиотеки D, затем я хочу использовать библиотеку L для моего проекта. Проблема в том, что когда я включаю заголовки L, я получаю (естественно?) Ошибки «Не могу открыть файлы include, которые являются частью D».Библиотечные зависимости Проект C++

Если я пишу проект, который должен использовать L, я не хочу заботиться о его зависимостях. Практическим примером может служить «Рамка рендеринга», которая объединяет несколько графических API. Пользователь не хочет включать правильные заголовки для правильной ОС, потому что это обязанность библиотек !.

Я очень надеюсь, что я ясно дал понять, и если на этот вопрос уже был дан ответ (я уверен, что он есть), не могли бы вы дать мне несколько ключевых слов для поиска?.

Спасибо за ваше время & счастливым кодирования :)

+1

Извините! Вы не можете просто «не хотеть заботиться о своих зависимостях» каждый и в любом случае. Чтобы разрешить включенные зависимости пути, например, GCC '-I', для разрешения зависимостей в пути к библиотеке есть опция -L' для компоновщика. –

+0

Если заголовки L требуют заголовков D, вам нужны заголовки D, чтобы использовать L. Period. Конец истории. Можете ли вы изменить библиотеку L? Если да, возможно, что заголовки L НЕ зависят от заголовков Ds ... –

+0

@ πάνταῥεῖ, а если он может и все мы ошибались? : -D –

ответ

0

Link L статически в ваш «Rendering Framework» Я рекомендую вам прочитать с ММБ помощью: When to use dynamic linking and static linking

При создании L в качестве статической библиотеки вы можете " включить «внутри» вашего исполняемого файла. Таким образом, вам не нужно заботиться о том, где находится L. Это имеет некоторые недостатки, например: если вы хотите изменить часть кода, принадлежащую L, вам придется перекомпилировать все ваши «рамки рендеринга».

Говорит, что:

Реализовать верхнюю библиотеку L. Использование некоторых статических библиотек (например, D). И включите все файлы *.h с D в том, который вы хотите использовать.

Библиотеки Boost используют этот шаблон для организации кода.

+0

Может быть, я этого не понял :(Вопрос в том, что: если у меня есть пример приложения, которое использует структуру рендеринга, я хочу, чтобы вручную включить Direct3D или OpenGl, я хочу, чтобы инфраструктура сделала это, и структура будет заботиться о связи с библиотеками через #pragma comments. Это плохой подход? –

+1

Хммм, мне не нравятся ссылки, ссылающиеся на источники за пределами SO, если только они не указывают на некоторые официальные публикации стандартов. И даже тогда я предпочел бы, чтобы они цитировались здесь. –

+0

Хорошо, я получаю то, что вы пытаетесь сказать, но если я включаю заголовок из «D» в «L», а затем включаю «L» из моего примера приложения, я получаю ошибки (естественно?) «Отсутствует заголовок из« D » ». Есть ли способ избежать этого? я правильно включил заголовки из «L», –

0

[I] фи есть пример приложения, которое использует рамки рендеринга я не хочу, чтобы вручную включить Direct3D или OpenGl [...]

Если рамки рендеринга был правильно установлен, его такие зависимости, как OpenGL, также должны быть правильно установлены. В этом случае файлы заголовков фреймворка должны найти файлы заголовков зависимостей в том месте, которое они ожидают.

Смежные вопросы