2009-12-01 1 views
2

У меня есть очень простая программа, чтобы упростить вещи, как показано ниже ...Visual Studio слияния DLL в консольное приложение

#include <openssl/evp.h> 
int main (int argc, char *argv[]) 
{ 
     EVP_CIPHER_CTX ctx; 
     EVP_CIPHER_CTX_init(&ctx); 
} 

Он ссылается на 1 функцию в DLL (libeay32.dll из OpenSSL). Я создаю его с настройками «Linker-> Input-> Additional Dependencies->", указывающий, где хранится libeay32.lib. Однако при запуске он будет жаловаться на «Это приложение не удалось запустить, потому что LIBEAY32.DLL не был найден». Я хочу построить его, чтобы я мог встроить эту DLL в исполняемый файл, поэтому он не должен искать его на клиентских машинах.

Если вы можете помочь, пожалуйста, объясните это маленькими шагами для ребенка, чтобы я мог понять, как я начинаю Visual Studio.

ответ

0

К сожалению, вы не можете включить DLL в исполняемый файл .Net в это время с помощью Visual Studio.
Некоторые люди смогли решить это, используя вместо этого Mono.

Вот некоторые ссылки обсуждают его:

+0

-1. Нет связанных с .NET и не связанных ссылок. Просто отсутствует DLL при запуске приложения. – jrbjazz

+0

Но он спросил, может ли он ** включить его в exe **. И на этот вопрос я ответил. – Nifle

0

Это не совсем то, что вы просите, но вы можете просто положить файл DLL в той же папке, что и ваш скомпилированный двоичный файл.

-1

Проблема не связана с компоновщиком или Visual Studio. Проблема заключается в запуске приложения. Вы должны поместить библиотеку libeay32.dll в каталог, который включен в PATH или в тот же каталог, где исполняемый файл.

EDIT: Проверьте Packing an exe + dll into one executable (not .NET)

HTH.

+0

Цитата из вопроса выше. «Я хочу построить его, чтобы у меня была эта DLL-библиотека, встроенная в исполняемый файл **, поэтому ее не нужно искать на клиентских машинах. – Nifle

1

Что вы спрашиваете, это link statically к вашему исполнителю.

Вот guide о том, как заставить OpenSSL скомпилироваться в статическую библиотеку на разных платформах.