Я создаю приложение C ++ для Windows, используя Interix, и мне нужно связать три объектных файла, чтобы обеспечить функциональность стороннего модуля лицензирования. Третья сторона предоставила объектные файлы, созданные Visual Studio. Есть ли способ конвертировать файлы для использования с GCC? Например, может быть, если я изменю название искажения с стиля Visual Studio на стиль GCC, что будет достаточно, или есть другие различия между двумя форматами объектных файлов?
Windows не имеет стандартизированного C ++ ABI (Приложение двоичный Интерфейс). Тем не менее, он имеет C ABI. Это ABI, используемый, например, Kernel32.DLL
Таким образом, все среды программирования Windows понимают это. Многие также могут создавать такие библиотеки DLL.
В этом случае файлы C ++ .obj должны быть связаны компоновщиком Visual Studio. Этот компоновщик определенно способен создавать файлы DLL. Вам придется написать extern "C"
функции, чтобы обернуть лицензирование функциональности. добавлять __declspec(dllexport)
чтобы указать, что эти функции экспортируются из DLL (в Windows функции по умолчанию являются частными для DLL).
В заголовке объявите те же функции, что и __declspec(dllimport)
, GCC это тоже понимает. Затем создайте ссылку на вновь созданную DLL, которая разрешит dllimport
‘символы
В дополнение к возможным различиям в символах между VC ++ и GCC / G ++, то, что вы пытаетесь сделать, может быть невозможным из-за проблемы с Windows API.
Программы, построенные из Interix GCC, могут работать только с Interix, и поскольку Interix является отдельной подсистемой, параллельной подсистеме Windows (или, скажем, подсистемой Win32), вы не можете вызывать какой-либо Windows API (например, из kernel32.dll) из Interix. программы.
Если этот объектный файл лицензирования содержит какие-либо вызовы Windows API, связывание будет невозможно.