Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
#1

Связывание библиотек - C++

11.06.2013, 14:36. Просмотров 572. Ответов 5
Метки нет (Все метки)

Допустим есть решение из 4 проектов- Common, A , B и Program.

Common содержит некие общие классы и интерфейсы ( например работа с памятью, потоками ). Не является библиотекой.
A и B - некие либы, часть приложения Program, оба используют зависимы Common.

Потребность в вариантах сборки:
* Динамическая: A.dll, B.dll, Program.exe
* Статическая. Program.exe

Для примера у нас в Common определен некий аллокатор Allocator в файлах( Allocator.h и Allocator.cpp ) и тип MyMap в файле Types.h, который по существу typedef std::map с моим аллокатором Allocator.

Обе библиотеки и сама программа работают с данным типом.

Как лучше организовать сборку проектов?

В голову приходит 2 мысли:

1) При сборки A , B и Program подключать исходные файлы Common, тем самым дублируя код, но это глупо.
2) Видел проекты где под либы программа выделяет фиксированные адреса. Как я понял в таком случае Program нужно собирать с Common. Далее Program подгружает либы в заранее определённые адреса. В итоге выходит полный аналог статической линковки, где либам будут известны адреса реализации Common. Но как это организовать - не знаю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2013, 14:36     Связывание библиотек
Посмотрите здесь:

связывание 2-х классов - C++
среда Embercadero RAD Studio 2010 столкнулся с проблемой: есть 2 класса например #ifndef Class1H #define Class1H

Связывание файлов - C++
Здравствуйте, помогите пожалуйста решить вопрос. Была программа, содержащая класс. Хочу сделать так, чтобы класс был в отдельном файле....

Связывание классов - C++
Всем привет. Подскажите, пожалуйста, как решить вот такую проблему: У меня есть класс connections который хранит в себе все активные...

Позднее и раннее связывание - C++
у меня проблема не могу разобратся с этим "приведите пример (без реализации методов) познего и раннего связывание" завтро здавать а мыслей...

Динамическое связывание DLL - C++
Как создавать библиотеку dll и чтобы работала программа, которую я напишу? Как осуществить динамическое связывание без импорта?

Раннее и позднее связывание - C++
Вот компилятор статическую функцию как бы компилирует ранним связыванием, а динамическую - поздним. Во многих учебниках говорят, что если...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
Эксперт С++
15297 / 6929 / 1096
Регистрация: 02.05.2013
Сообщений: 11,340
Завершенные тесты: 1
11.06.2013, 16:32     Связывание библиотек #2
Цитата Сообщение от kvadro Посмотреть сообщение
) При сборки A , B и Program подключать исходные файлы Common, тем самым дублируя код, но это глупо.
Сделайте Common библиотекой (dll, lib).

Цитата Сообщение от kvadro Посмотреть сообщение
2) Видел проекты где под либы программа выделяет фиксированные адреса. Как я понял в таком случае Program нужно собирать с Common. Далее Program подгружает либы в заранее определённые адреса. В итоге выходит полный аналог статической линковки, где либам будут известны адреса реализации Common. Но как это организовать - не знаю.
Не знаю, что именно имеется в виду, но звучит как грязный и непереносимый хак.
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
21.06.2013, 15:21  [ТС]     Связывание библиотек #3
Сделайте Common библиотекой (dll, lib).
Подтягивать функции из dll Common будет неудобно ведь.

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

Добавлено через 18 часов 11 минут
или я не прав?

Добавлено через 1 час 30 минут
ап
Убежденный
Системный программист
Эксперт С++
15297 / 6929 / 1096
Регистрация: 02.05.2013
Сообщений: 11,340
Завершенные тесты: 1
21.06.2013, 16:04     Связывание библиотек #4
Цитата Сообщение от kvadro Посмотреть сообщение
Подтягивать функции из dll Common будет неудобно ведь.
Поясните, что что значит "подтягивать" и почему неудобно.
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
21.06.2013, 16:30  [ТС]     Связывание библиотек #5
Убежденный
Допустим есть приложение и его модули A, B.

Модуль A

A/A.h:
C++
1
2
3
4
5
6
7
8
namespace A
{
  class A
  {
    public:
      method();
  }
}
В A/A.cpp реализация


Модуль B

B/B.h:
C++
1
2
3
4
5
6
7
8
namespace B
{
  class B
  {
    public:
      method();
  }
}
В B/B.cpp реализация


Ну и программа main.cpp:
C++
1
2
3
4
5
6
7
8
9
10
#include "A/A.h"
#include "B/B.h"
 
int main()
{
    A a;
    B b;
 
    return 0;
}
В релизе должен быть один исходный файл, а значит линкуем main.cpp, A.cpp, B.cpp.
В дебаге модули должны быть реализованы как отдельные либы. Как приложению подхватить реализацию классов A и B в таком случае?

Добавлено через 11 минут
Я говорю про глобальную область видимости. Пример выше привёл крайне неудачный.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2013, 16:50     Связывание библиотек
Еще ссылки по теме:

Не получается явное связывание - C++
Всем привет. Делаю пример с явным связывание динамической DLL, но я не понимаю одной штуки. Сам заголовочный .h файл: #pragma once ...

Связывание классов в 1 файле - C++
Здравствуйте! Разрабатывая программу столкнулся с проблемой... в 1 файле разместил несколько классов которые нужно между собой связать......

Неявное связывание DLL - C++
Нид хелп разобраться. Необходимо сделать приложение, которое будет использовать функцию из неявно связываемой библиотеки. Скорее всего, я...

Связывание потоков ввода-вывода - C++
cin.tie(&cout); cout<<"Enter x: "; cin>>x; для чего применяется связывание? а то чтот не доходит:) и чем несвязанные потоки...

Статическое связывание параметров методов - C++
Добрый день! В коде (представлен ниже) сделал оболочки для константной и простой ссылок. Известно, что в функции, которая ожидает...

Почему не работает позднее связывание - C++
Здравствуйте. В приведенном коде есть класс-шаблон А, и его наследники (классы B,C,D). В main создаю масcив указателей на базовый шаблонный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Убежденный
Системный программист
Эксперт С++
15297 / 6929 / 1096
Регистрация: 02.05.2013
Сообщений: 11,340
Завершенные тесты: 1
21.06.2013, 16:50     Связывание библиотек #6
Можно сделать так, чтобы A и B, в зависимости от конфигурации, собирались в
статические или динамические библиотеки. При этом у них в обоих случаях
будут файлы .lib. Вот пускай главный модуль вместо cpp-реализаций A и B
подключает эти .lib-файлы. Своего рода абстракция от типа сборки модулей.
Yandex
Объявления
21.06.2013, 16:50     Связывание библиотек
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru