2015-01-29 5 views
2

Итак, я создал dll, и он отлично компилируется. Тогда я ссылаюсь этот DLL, который я сделал в другом проекте и получил сообщение об ошибке:Невозможно открыть файл include из DLL

error C1083: Cannot open include file: 'openssl\ssl.h': No such file or directory 

этого .h файл используется внутри библиотеки DLL, я думаю, что с помощью ссылки на библиотеках DLL я не должен включить этот файл непосредственно ... Не должно ли dll иметь все файлы, необходимые для его цели «внутри»?

+0

Пожалуйста, [разместите свой DLL-код] (http://stackoverflow.com/help/mcve) здесь (т.файлы заголовков и исходный код для DLL) вместе с кодом, который пытается * использовать * DLL (т. е. «другой проект», который вы упомянули). Если вы «сделали dll, и он отлично компилируется». то вы не увидите этого сообщения - я думаю, что ваш «другой проект» включает заголовок, который пытается включить 'openssl \ ssl.h' - то есть он не имеет ничего общего с DLL, но заголовок внутри, проблема с заголовком. – GoBusto

ответ

2

Нет, потому что:

  • .dll является скомпилирован, двоичный файл, который может быть dynamically loaded в выполнения по .exe программ.
  • Файл .h (или .hpp) содержит исходного кода определения прототипов функций или структуры данных для программы/C++ вашего C, которые используются во время компиляции .

Для компиляции исходного кода, вам необходимо:

  • #include файл (ы) заголовка, так что остальная часть кода знает, что структуры данных и подписи функции хранятся в DLL выглядит как.
  • Ссылка на файл .lib или .a файл, эквивалентный файлу .dll.

Если все пойдет хорошо, то .exe файл, созданный в процессе компиляции будет иметь возможность динамически загружать и использовать (уже скомпилированные) функции, хранящиеся в файле .dll.

+0

, но этот .h ссылается только на dll, а не на что-либо вне его. – peugas

+2

Если он был указан только в вашем (уже скомпилированном) DLL-файле, то вы не увидите это сообщение. Компилятор не будет знать (или заботиться) о файлах исходного кода, которые были использованы для * создания * библиотеки DLL. – GoBusto

3

Не должно ли dll иметь все файлы, необходимые для его цели «внутри»?

№ A. DLL содержит машинный код.

Основное различие между .c и .h файлов является то, что .c файлы содержат код и .h файлы содержат заголовки (то есть это то, что они, как предполагается, хотя они не обязаны). Вам нужны эти файлы заголовков, чтобы компилятор знал, что искать в DLL. После того, как ваша программа была скомпилирована и связана, файлы заголовков больше не требуются.

Именно поэтому авторы библиотек, написанных на C или C++, которые не являются открытым исходным кодом, обычно предоставляют прекомпилированные двоичные файлы, а также файлы заголовков.

Формат файла, содержащий машинный код и заголовки, был бы возможен, но, насколько мне известно, такого формата не существует, и было бы очень плохо, если бы это произошло, потому что для большого количества программ это означало бы огромные исполняемые файлы ,

+0

, но это .h упоминается только внутри dll, а не из чего-либо вне его. – peugas

+2

Ну, очевидно, нет. Один из файлов, которые вы включили, должен попытаться включить его. – Siguza

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