6 / 6 / 1
Регистрация: 27.12.2014
Сообщений: 67
|
||||||
1 | ||||||
Про линковку библиотек и про архитектуру иерархии классов31.12.2015, 20:42. Показов 950. Ответов 4
Метки нет Все метки)
(
Добрый день! Возникла такая вот проблема. Я использую MinGW Developer Studio. Это довольно старая IDE, поддержка которой завершилась в 2005 году. Как можно догадаться из названия по умолчанию она использует компилятор MinGW, который я там не менял, соответственно и он где-то такого же года выпуска.
Я пытаюсь баловаться с DirectX9. И все было ничего ровно до тех пор пока мне не понадобилась библиотека d3dx9. В стандартном наборе библиотек MinGW оказалась только d3dx9d, я решил ей не пользоваться и попробовал залинковать библиотеку из DirectX SDK. Но выяснилось, что MinGW не любит микрософтовские *.lib. Кроме того, оказалось, что в Windows *.lib принято обозначать не только статические библиотеки, но и файлы содержащие то ли ссылки, то ли таблицы символов для динамических библиотек. Да, существует утилита reimp, которая умеет есть майкрософтовские библиотеки и порождать из них lib*.a файлы. Хотелось бы спросить, может знает кто, возможно ли это вообще как-то прилинковать файлы *.lib к проекту, используя MinGW (ну т.е. g++, входящий в него)? Т.к. если линковщику дать *.lib, то он ее видит и, видимо, даже линкует, но реализации функций в нем не находит. Может кто знает особенности всех этих процессов? Второе. Есть следующая архитектура:
Может кто-нибудь сказать мне, жизнеспособна ли такая архитектура, ну, и как-нибудь прокомментировать представленное? Спасибо.
0
|
31.12.2015, 20:42 | |
Ответы с готовыми решениями:
4
Про линковку и про исключения
Вопрос про утилизацию классов |
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
31.12.2015, 20:58 | 2 |
Это называется библиотека импорта. lib*.a файлы точно так же могут быть как статическими библиотеками, так и библиотеками импорта.
Правильный вариант: сделать библиотеку импорта для нужной dll в формате mingw. Единственная проблема здесь - это если библиотека собранная студией имеет С++-сный интерфейс, а следовательно несовместимый name mangling. Почитать про это можно здесь. Что касается DX, то уже давно существуют сконвертированные версии библиотек для mingw. Например в составе MSYS2 есть и dx9 и dx10 библиотеки (в том числе указанная тобой libd3dx9.a). Потому что protected наследование. Ты можешь объяснить зачем оно тебе здесь понадобилось?
1
|
6 / 6 / 1
Регистрация: 27.12.2014
Сообщений: 67
|
|
31.12.2015, 21:20 [ТС] | 3 |
Ну т.е. это будет эквивалентно тому, если я reimp'ом поем все библиотеки из SDK?
Собственно затем, чтобы сделать все унаследованные публичные методы и члены защищенными. А вывод этих методов и членов из публичной зоны уже непосредственно мое личное желание, не имеющее более глубокого обоснования.
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
31.12.2015, 21:27 | 4 |
Да.
Правда обычно при таком портировании накладываются патчи на заголовочные файлы из SDK, чтобы пофиксить возможные проблемы совместимости. В общем случае это лучше, чем проделывать все это самому. Я кажется понял причину твоих сомнений: библиотеки будут использованы оригинальные из SDK, меняются только библиотеки импорта, а они требуются только на этапе сборки приложения. При работе не будет разницы каким образом все это собиралось. Использоваться будут те же dll-ки из состава DX, как если бы, например, это собиралось в VS. Хорошо. Но вместе с этим у тебя сделалось защищенным и преобразование указателей Наследник->База. Следовательно теперь этот каст можно делать только изнутри наследника, но не снаружи, как у тебя.
0
|
6 / 6 / 1
Регистрация: 27.12.2014
Сообщений: 67
|
|
31.12.2015, 21:36 [ТС] | 5 |
Ага! Думаю, это то, что было нужно. Благодарю за информацию.
Хмм... Таким образом, в этом случае защищенное наследование не жизнеспособно. Спасибо за ответы и наводки.
0
|
31.12.2015, 21:36 | |
Помогаю со студенческими работами здесь
5
Еще немного про конструкторы обобщенных классов Про распределение памяти и указатели? При создании классов подскажите как првильно написать программу про наследование классов 1.про функция exit(); 2.про this Создание иерархии классов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
![]() |
Новые блоги и статьи
![]() |
||||
Неблокируемый стек в C++26: реализуем простой сборщик мусора
stackOverflow 02.03.2025
Многопоточные приложения требуют надежных и производительных структур данных, способных эффективно работать в условиях конкурентного доступа. Неблокируемые структуры данных представляют собой особый. . .
|
Шаблон REQ/REP в ZeroMQ: сверхбыстрый обмен сообщениями в C++ и Python
stackOverflow 02.03.2025
Построение высоконагруженных распределенных систем требует надежного и производительного механизма обмена сообщениями. ZeroMQ выделяется среди прочих решений своей невероятной скоростью работы и. . .
|
Нестандартные приемы работы с итераторами в C++
stackOverflow 02.03.2025
Итераторы - один из краеугольных камней C++, предоставляющий универсальный механизм обхода и манипуляции данными в контейнерах. Появившись как замена небезопасным указателям, они эволюционировали от. . .
|
Лексический анализ и регулярные выражения в C++26
stackOverflow 02.03.2025
Лексический анализ - ядро любого компилятора и инструмента обработки текста. Каждый программист сталкивается с задачами парсинга строк, обработки файлов конфигурации или анализа пользовательского. . .
|
Подробно о std::mdspan в C++23
stackOverflow 02.03.2025
Работа с многомерными массивами данных традиционно была одной из сложных задач в C++. Программистам приходилось создавать собственные абстракции или использовать сторонние библиотеки для эффективной. . .
|
Колмогоровская сложность в C++: Путь к совершенному коду
stackOverflow 02.03.2025
Абстрактная математическая теория Колмогорова стала мощным средством оценки и улучшения программного кода. Сложность алгоритма - не только в его вычислительной эффективности, но и в том, насколько. . .
|
Изменения в C# 14
stackOverflow 02.03.2025
Одно из самых значимых изменений в C# 14 - поддержка коллекционных выражений, которые позволяют создавать и инициализировать коллекции с помощью нового лаконичного синтаксиса. Это нововведение. . .
|
Разработка кроссплатформенного мобильного приложения для iOS/Android на C++
bytestream 02.03.2025
C++ как язык программирования высокого уровня с прямым доступом к аппаратным ресурсам позволяет создавать приложения, работающие одинаково быстро как на iOS, так и на Android устройствах. Ни для кого. . .
|
Аутентификация/авторизация на Golang
bytestream 02.03.2025
Go предлагает множество возможностей для создания надежных систем аутентификации. Встроенные криптографические пакеты, высокая производительность и простота параллельной обработки запросов делают его. . .
|
Нововведения TypeScript 5.8
bytestream 02.03.2025
TypeScript 5. 8 приносит много возможностей и оптимизаций, которые существенно расширяют границы типобезопасного программирования на JavaScript. Эта версия включает ряд значительных улучшений в работе. . .
|