Skip to content

Как подключить разделяемую библиотеку к проекту в Visual Stuido

Похожие посты

  • JNI в Windows
  • Написание разделяемой библиотеки

    Создайте проект File->New->Project…
    Появится окно New Project. Поле Name введите название для библиотеки, например MyMathList:
    В появившимся диалоговом окне Win32 Application Wizard щелкните Next:

    1
    В появившемся окне Win32 Application Wazard нажмите на Next:

    2
    Появится второе окно мастера создания приложений. В группе Application type выбираем DLL, в группе Additional options кому что нравится, я предпочитаю пустой проект (опция Empty project). После того как создаваемый проект сконфигурирован должным образом, жмем на Finish:

    3
    В Visual Studio появится пустой проект библиотеки. Далее мы добавим к проекту файлы с исходным кодом:

    4
    Начнем добавлять функции, которые будут доступны из нашей либы. Чтобы функции были доступны для кода, который будет использовать нашу либу, нужно прописать заголовки этих функций в хедаре. Добавим к нашей либе хедеры, для этого щелкаем правой кнопкой мыши на виртуальном каталоге Header Files, далее Add->New Item…:

    5
    Появится окно Add New Item, в котором мы выберем что хотим добавить, в данном случае это заголовочный файл и дадим ему имя, пусть это будет MyMathFunctions и жмем на Add:

    6
    Теперь добавьте такой код:

    MyMathFunctions.h

    // MyMathFunctions.h
    
    #ifdef MATHFUNCSDLL_EXPORTS
    #define MATHFUNCSDLL_API __declspec(dllexport) 
    #else
    #define MATHFUNCSDLL_API __declspec(dllimport) 
    #endif
    
    int MATHFUNCSDLL_API sum(int a, int b);
    int MATHFUNCSDLL_API difference(int a, int b);
    int MATHFUNCSDLL_API multiply(int a, int b);
    int MATHFUNCSDLL_API divide(int a, int b);
    

    После того как хедер добавлен, осталось добавить его имплементацию. Проделайте все тоже самое по добавлению айтема, только в окне добавления, вместо Header File (.h) выберите C++ File (.cpp) и добавьте такой код:

    MyMathFunctions.cpp

    #include "MyMathFunctions.h"
     
    int sum(int a, int b)
    {
        return a + b;
    }
     
    int difference(int a, int b)
    {
        return a - b;
    }
     
    int multiply(int a, int b)
    {
        return a*b;
    }
     
    int divide(int a, int b)
    {
        return a/b;
    }
    

    Соберите проект: Build->Build Solution или F7.
    Если библиотека собралась без ошибок, то в каталоге проекта по адресу ~/My Documents/Visual Studio 2012/Projects/MyMathLib/Debug должен появится файл разделяемой библиотеки с расширением dll, в нашем случае это будет MyMathLib.dll. Кроме того, поскольку мы это все делаем на виндовс машине, то для подключения этой либы в другой проект нам понадобится еще файл с расширением lib. В нашем случае он называется так же MyMathLib.lib.
    По библиотеки все, теперь осталось ее использовать в другом приложении.

    Подключение разделяемой либы к проекту

    Для того, чтобы ее использовать в другом приложении ее надо подключить к проекту приложения, которое будет нашу либу юзать. Это делается немного сложней, чем создать саму либу. Давайте попробуем ее подключить сначала к проекту в Visual Studio.
    Закройте проект: File->Close Solution
    Создайте новый проект: File->New->Project…:

    7
    Появится окно New Project. В появившемся окне выберите тип проекта Win32 Console Application, назначьте ему имя, например MathFunctionsUser и жмем на Ok:

    8
    В первом окне мастера просто щелкните на кнопку Next:

    9
    Затем выберите тип проекта (Application Type) консольное приложение (Console Application), в опциях (Application options) кому что нравится, я выбрал пустой проект (Empty project) и жмем по кнопке Finish:

    10
    После того как проект создан, кликните правой кнопкой мыши по виртуальному каталогу Source Files и выберете Add->New Item…
    11
    В появившемся диалоговом окне, выберите тип проекта C++ File (.cpp) и назовите его, например, run:

    12
    Появится редактор кода для приложения run. Не будем здесь ничего мудрить, просто добавим простой код, который подключает хедер и делегирует в либу одну из арифметических операций:

    run.cpp

    #include <iostream>
    #include "MyMathFunctions.h"
    
    int main()
    {
    	int result = sum(2, 4);
    	std::cout << "result = " << result << std::endl;
    	return 0;
    }
    

    Вот такой очень простой, но наглядный код, который будет работать с разделяемой либой.
    Теперь попробуем собрать наш проект. В окне Solution Explorer выберите наш проект и нажмите F7.
    В результате сборка не пройдет и в окне вывода Output должно появится что-то подобное этому:

    1>------ Build started: Project: MathFunctionsUser, Configuration: Debug Win32 ------
    1>  run.cpp
    1>c:\users\user\documents\visual studio 2012\projects\mathfunctionsuser\mathfunctionsuser\run.cpp(2): fatal error C1083: Cannot open include file: 'MyMathFunctions.h': No such file or directory
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
    

    Компилятор говорит, что не возможно найти такой хедер и бла бла бла. Кроме того в окне редактора кода должна быть подчеркнута строчка:

    #include "MyMathFunctions.h"
    

    То есть компилятор этого хедера не видит. Что ж, укажем компилятору где искать хедер. Для этого выберем проект в окне Solution Explorer и идем в меню Project->References или правой кнопкой по проекту, в появившемся меню Project->References:

    13
    Появится окно Property Pages. Раскройте список Configuration Properties->C/C++->General и нажмите на поле Additional Include Directories там будет выпадающий список:

    14
    В этом выпадающем списке будет единственный пункт Edit… выбираем его, и появится окно Additional Include Directories в котором нажимаем по значку желтого каталога:

    15
    Это еще не все! В поле, что ниже кнопки с папкой появится поле с кнопкой вот жмем по той самой кнопке тогда появится стандартное виндовое окно в котором нужно указать путь где лежит хедер (в нашем случае это Projects->MyMathLib->MyMathLib) и нажать на Select Folder:

    16
    Далее нам нужно указать проекту файл с расширением lib. Для этого в том же окне Property Pages раскрываем список Configuration Properties->Linker->Input. В правой части окна кликните по полю Additional Dependencies, появится раскрывающий список в котором выберите единственный пункт Edit…:

    17
    Появится окно Additional Dependencies. В верхнем поле добавьте имя файла с расширением lib в нашем случае это MyMathLib.lib:

    18
    Название зависимости мы добавили, осталось еще указать путь к этой зависимости, это делается в пункте General. Для этого в окне Property Pages раскройте список Configuration Properties->Linker->General и кликните по полю Additional Library Directories появится раскрывающий список в котором выберите единственный пункт Edit…:

    19
    Появится окно Additional Library Directories в котором надо указать путь к файлу с расширением lib то есть к зависимости. Я уже скрины этих окон приводить не буду, они выглядят так же как те, что выше, в общем когда добавите путь, жмем на Ok везде где требуется и возвращаемся в редактор кода.

    Сборка и запуск проекта

    Сборка и запуск проекта достаточно тривиальна, просто выбираете проект в окне Solution Explorer и нажимаем на F7:

    1>------ Build started: Project: MathFunctionsUser, Configuration: Debug Win32 ------
    1>  run.cpp
    1>  MathFunctionsUser.vcxproj -> ~\MathFunctionsUser\Debug\MathFunctionsUser.exe
    ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
    

    Если 1 succeeded, 0 failed значит все должно быть норм, запускаем проект Ctrl-F5. Но после того как приложение запустили, вылетает системная ошибка:

    20
    Она означает, что приложение зависит от разделяемой либы, которую (то есть либу) не может найти. Возникает вопрос, а файл с расширением lib тогда что? Дело в том что файл с расширением lib это немножко не то. Файл с расширением lib это файл для виндового проекта, в котором хранится некая метадата о разделяемой библиотеке как проекту с ней взаимодействовать, а сама библиотека (файл с расширением dll) содержит собственно сам исполняемый код, то есть код где делаются арифметические операции. Вот о дээлельке мы в проекте нигде ничего не упоминали и никуда ничего не переносили, потому что приложение по умолчанию ищет ее в каталоге, куда помещается файл с расширением exe. В общем последнее, что нам осталось сделать это скопировать файл с расширением dll в каталог программы, которая будет юзать нашу библиотеку, в нашем случае дээлельку нужно переместить сюда: MathFunctionsUser/Debug.
    Теперь запустим приложение еще раз (можно без сборки) командой Ctrl+F5 и теперь должны получить вот такой вывод в консольном окне:

    result = 6
    Press any key to continue...
    

    Теперь наше приложение юзает сёрд пати либу с простейшими арифмитическими операциями.

    Вывод

    Подключение сёрд пати либы к проекту на Visual Studio под виндовсом, задача мягко говоря не тривиальная то есть минимум кода и максимум нудных диалоговых окон. Но поскольку в реальности приложений написанных под операционную систему виндовс достаточно много, делать это приходится достаточно часто. Но не всегда приходится работать в вижуале (хотя вижуал студио проекты другого выбора не предоставляют) еще иногда надо подключать сёрд пати либы в командной строке. В следующем посте рассмотрим этот способ.

    Поделиться в социальных сетях

    Опубликовать в Google Plus
    Опубликовать в LiveJournal
    Опубликовать в Мой Мир
    Опубликовать в Одноклассники
    Опубликовать в Яндекс

    Добавить комментарий

    Ваш e-mail не будет опубликован. Обязательные поля помечены *