ilyachalov (ilyachalov) wrote,
ilyachalov
ilyachalov

Category:

Создание библиотеки классов (объектный файл)

Начало тут:
1. библиотека классов;
2. создание библиотеки классов (в тексте).

Область применения: язык программирования C++, операционная система «Windows 7», среда разработки «Visual Studio Community 2017».

В предыдущем посте я описал создание библиотеки классов в виде двух текстовых файлов, являющихся интерфейсом и реализацией библиотеки классов (mylib.h и mylib.cpp соответственно).

По разным причинам разработчики библиотеки классов могут не хотеть показывать текст реализации пользователю библиотеки классов (разработчику конечного приложения). В таких случаях реализация библиотеки классов может распространяться в виде объектного файла.

Ничего нового по сравнению с предыдущим постом делать не нужно. После сборки проекта (6-й пункт) в конфигурации Release для платформы x86 в папке проекта появилась папка Release с исполняемым файлом Project1.exe. Но кроме исполняемого файла там еще появились и другие файлы, в том числе объектные файлы .obj. Нас интересует объектный файл mylib.obj. Он содержит реализацию нашей библиотеки классов в двоичном виде.

Таким образом, библиотека классов может в нашем случае распространяться в виде двух файлов — mylib.h (интерфейс) и mylib.obj (реализация).

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

1) Запустить среду «Visual Studio Community 2017».

2) Создать еще один пустой проект (подробнее тут). (Пример названия проекта: Project2. Название Project1 у меня уже занято под проект из предыдущего поста.)

3) Добавим в проект исходный файл конечного приложения. (В качестве такового я взял исходный файл test_app.cpp тестового приложения из предыдущего поста. То есть просто скопировал его в папку нашего нового проекта Project2 и затем добавил его в проект через обозреватель решений.)

4) Копируем в папку нашего нового проекта Project2 библиотеку классов в виде файлов mylib.h и mylib.obj.

Заголовочный файл mylib.h компилятор найдет, благодаря его включению в начало исходного файла test_app.cpp нашего конечного приложения:
#include "mylib.h" // интерфейс библиотеки классов

5) А вот объектный файл mylib.obj компоновщик сразу не найдет. Чтобы компоновщик нашел этот файл, нужно добавить его в свойствах (настройках) проекта.

При этом важно, чтобы активная конфигурация нашего проекта совпадала с конфигурацией проекта, при которой был получен объектный файл mylib.obj. (В нашем примере это конфигурация Release для платформы x86.)

Это можно сделать через обозреватель решений. В обозревателе решений следует найти ветку с названием проекта (в нашем случае — Project2). Не решения, а именно проекта! (Начинающие часто путают.) Далее — щелкнуть правой кнопкой мыши на название проекта в этой ветке и в открывшемся контекстном меню выбрать последний пункт — «Свойства». Откроется окно «Страницы свойств Project2».

В этом окне сначала следует проверить, что сверху выбраны правильные конфигурация (в нашем случае — Release) и платформа (в нашем случае — Win32, это синоним x86). После этого в разделе слева следует выбрать пункт «Свойства конфигурации» — «Компоновщик» — «Ввод». И в разделе справа выбрать первый пункт в списке свойств — «Дополнительные зависимости». В это поле следует добавить название нашего объектного файла mylib.obj, включая его расширение. Чтобы закончить редактирование свойств проекта, нужно нажать на кнопку «ОК» в нижней части окна свойств проекта.

6) Запустить сборку проекта (конфигурация: Release, платформа: x86).

После сборки в папке проекта появится папка Release, в которую будет помещен исполняемый файл. (В нашем примере это будет Project2.exe.) Его размер в точности совпадет с файлом Project1.exe из предыдущего поста. Это логично, потому что и должны получиться полностью идентичные файлы, различающиеся только названием.

7) Запуск исполняемого файла Project2.exe (подробнее тут).

Результат должен совпадать с результатом из предыдущего поста (см. картинку).

Файлы проекта: тут.
Tags: Образование, Программирование
Subscribe

  • JavaScript: Blob

    Прочел подраздел 2.3 « Blob» третьей части учебника по JavaScript. Для меня эта статья оказалась настолько объемной в плане нового, что ее разбор…

  • Сказка про двоичные данные, кодировку Windows-1251 и Юникод

    Вопрос из комментариев к подразделу 2.3 « Blob» третьей части учебника по JavaScript, цитата: Не могу найти способ выдавать файл с кодировкой…

  • Как работает кодирование Base64, окончание

    Начало: « Как работает кодирование Base64». Пример второй. « Картинка-смайлик» В предыдущем примере кусок двоичных данных, содержащий текст,…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments