WedX - журнал о программировании и компьютерных науках

Функция, определенная с помощью __declspec(dllexport) в файле .h, но не в файле .c, отбрасывает __declspec(dllexport)

Я заметил, что несколько проектов не могут быть встроены в разделяемую библиотеку в Windows с MinGW-w64, потому что они определяют функции с __declspec(dllexport) в файле заголовка, но реализация позже не повторяет __declspec(dllexport), в результате чего MinGW GCC отбрасывает первый __declspec(dllexport).

Сообщение, которое я получаю,

'functionname' redeclared without dllimport attribute: previous dllimport ignored [-Werror=attributes]

Как я могу сказать MinGW GCC сохранить __declspec(dllexport), когда он отсутствует во второй раз?

29.12.2020

  • __declspec(dllexport) не нужно повторять в реализации, при условии, что реализация включает заголовочный файл, в котором были определены эти функции. 29.12.2020
  • @ssbssa Я провел простой тест, и это доказало, что вы правы. Однако у меня есть несколько проектов, приводящих к redeclared without dllimport attribute: previous dllimport ignored, возможно, это связано с определенным флагом компилятора... 30.12.2020
  • Ну, это про dllimport, а не про dllexport. Я предполагаю, что у вас есть какое-то определение, которое выбирает, какой из них следует использовать, и похоже, что это не работает, или это определение установлено неправильно. 30.12.2020
  • Ты прав. Спасибо! 30.12.2020

Ответы:


1

Сообщение redeclared without dllimport attribute на самом деле указывает, что заголовочный файл определил функции с __declspec(dllimport) вместо __declspec(dllexport).

Решение состояло в том, чтобы иметь правильное определение (с флагом компилятора -D), чтобы функции определялись с помощью __declspec(dllimport).

Одним из конкретных примеров этого был djvulibre-3.5.27, где мне пришлось собрать make -Clibdjvu CFLAGS="-DDJVUAPI_EXPORT -DDDJVUAPI_EXPORT -DMINILISPAPI_EXPORT" CXXFLAGS="-DDJVUAPI_EXPORT -DDDJVUAPI_EXPORT -DMINILISPAPI_EXPORT" перед запуском make для остальной части пакета.

30.12.2020
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]