Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

11.06.2013, 14:36. Просмотров 697. Ответов 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. Но как это организовать - не знаю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2013, 14:36
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Связывание библиотек (C++):

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

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

Динамическое связывание - C++
Здравствуйте! Возник вопрос. Если у нас есть if и в теле if создаётся переменная, то какое в данном случае связывание? Я предполагаю, что...

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

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

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

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

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

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

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

Добавлено через 1 час 30 минут
ап
0
Убежденный
Ушел с форума
Эксперт С++
15933 / 7243 / 1140
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
21.06.2013, 16:04 #4
Цитата Сообщение от kvadro Посмотреть сообщение
Подтягивать функции из dll Common будет неудобно ведь.
Поясните, что что значит "подтягивать" и почему неудобно.
0
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 минут
Я говорю про глобальную область видимости. Пример выше привёл крайне неудачный.
0
Убежденный
Ушел с форума
Эксперт С++
15933 / 7243 / 1140
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
21.06.2013, 16:50 #6
Можно сделать так, чтобы A и B, в зависимости от конфигурации, собирались в
статические или динамические библиотеки. При этом у них в обоих случаях
будут файлы .lib. Вот пускай главный модуль вместо cpp-реализаций A и B
подключает эти .lib-файлы. Своего рода абстракция от типа сборки модулей.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2013, 16:50
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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