Я работаю над кроссплатформенным проектом c ++ / qt с системой плагинов, мы используем файлы so на linux и dll на windows. Мы используем gcc в Linux и Visual Studio 2010 в Windows через cmake.
Проблема в том, что нашим плагинам иногда нужно вызывать функцию из исходного кода приложения, которая отлично работает в Linux с gcc, просто включив заголовочные файлы. Но в Visual Studio мы получили неразрешенные ошибки внешних символов.
Это потому что так и dll файлы работают по другому?
благодарю вас.
Поведение по умолчанию для экспорта символов из библиотеки DLL в Windows совершенно противоположное: по умолчанию символы невидимы, их необходимо экспортировать явно. С VC ++ это делается __declspec(dllexport)
declarators.
РЕДАКТИРОВАТЬ (информация добавлена): Вы входите в область нестандартизированного, специфичного для системы поведения … С кросс-платформенными «подключаемыми» компонентными системами в C ++ гораздо больше проблем, чем вы могли бы ожидать. В Windows есть так называемые библиотеки импорта, которые определяют все символы, экспортируемые из DLL. Вы должны соединиться с этими библиотеками, чтобы разрешить эти символы. Это называется неявное связывание. Вы также можете ссылаться явно, что означает загрузку DLL и ее экспортированных символов во время выполнения. Однако все это просто технические подробности по сравнению с так называемыми проблемами двоичной совместимости, которые почти наверняка убьют вас, если не учитывать их при разработке системы компонентов.
Мне интересно одно: вы сказали, что используете Qt. Фреймворк приложения Qt имеет свои собственные межплатформенные соглашения и правила для написания и создания подключаемых компонентов. Почему бы тебе не придерживаться этих …?
Других решений пока нет …