Недавно я получил SDK с закрытым исходным кодом, состоящий из файла заголовка C (.h
), файла библиотеки (.lib
) и динамической библиотеки (.dll
). Они были скомпилированы с использованием Microsoft Visual C++. Тем не менее, я пытаюсь написать свой код с помощью MinGW (GCC портирован на Windows, для любого, кто не знаком с проектом). Похоже, что ld не может ссылаться на файл .lib
. Мне было интересно, можно ли написать оболочку совместимости между VS-компилированным кодом и кодом GCC, который я пишу.Написание GCC-совместимой обертки вокруг файла .lib
ответ
Есть ли несоответствие ABI или он просто не хочет связываться с форматом объекта? Если это просто проблема связывания, вы можете извлечь нужные вам функции, разобрать их, а затем собрать их в объект, с которым может работать ваш компоновщик. Еще проще, может objcopy(1)
может говорить в обоих форматах и может вам помочь?
Если у вас есть проблема с ABI, вы можете сделать то же самое, но также добавить слой прокладок, чтобы взломать ABI так, чтобы вызовы функций работали. Насколько сложным является этот уровень и насколько сложным он будет писать, будет зависеть от интерфейсов функций, которые вы пытаетесь использовать.
Не слишком обескураживайте комментарии - это программное обеспечение, поэтому довольно что-нибудь возможно.
Я не сказал, что это невозможно; конечно, это возможно. Я сказал, что буду удивлен, если это будет легко. – jason
По моему опыту, занимающемуся подобным делом, требуется немного времени, чтобы размахивать разборкой во что-то новое, что может быть связано с новой инструментальной цепью, но это все. Если вам нужно взломать ABI, это еще одно усилие, но я бы не стал описывать это как сложное - конечно, это зависит от того, будете ли вы распространять типы va_list или что-то еще. –
На данный момент кажется, что он просто не хочет связываться. Я указываю 'ld.exe' в файле' .lib', и он говорит мне, что не может его найти. Изучив это в течение последних нескольких часов, кажется, что это не потому, что на самом деле он не видит файл, а потому, что он не видит полезный файл. Тем не менее, исправления приветствуются. –
- 1. python: написание обертки вокруг стороннего класса
- 2. Написание обертки вокруг классов stl с итераторами в C++
- 3. Обертки вокруг лямбда-выражений
- 4. Реализация обертки вокруг threadpool
- 5. написание обертки для языка программирования
- 6. Написание управляемой обертки для Chromium
- 7. Написание обертки за моими исключениями
- 8. Создание обертки вокруг объекта Session
- 9. Библиотеки обертки вокруг J2ME apis
- 10. Regex - заменить обертки вокруг строк
- 11. Написание простой обертки для превращения Java integer.
- 12. Перенос на PHP 5.6: Написание обертки MySQL
- 13. ExtAsp или Coolite - обертки ASP.NET вокруг ExtJs
- 14. дизайн для обертки вокруг утилит командной строки
- 15. Помещение обертки вокруг группы элементов в XSLT
- 16. Конструктор для обертки вокруг std :: vector
- 17. Остановка текста от обертки вокруг кратных изображений
- 18. класс дизайн для обертки вокруг неуправляемого кода
- 19. Создание обертки задачи вокруг существующего объекта
- 20. Как избавиться от пустого пространства вокруг обертки?
- 21. Запись обертки JNI вокруг основной функции C
- 22. XSLT преобразование, добавление обертки вокруг дочерних элементов
- 23. написание тестов для модулей в папке lib
- 24. Написание файла Определенный файл
- 25. Matlab legacy_code Tool - Написание функции обертки для захвата массива
- 26. Building C# Обертка вокруг файлов C++ lib
- 27. Написание PHP-файла не работает
- 28. Написание обертки для функции линейного моделирования [MASS :: lm.gls()]
- 29. Написание обертки в malloc с void как возвращаемый тип
- 30. Написание нового файла WAV
Я был бы в шоке, если бы вы могли снять это без усилий геркулеса. – jason
В исходном SDK, вероятно, есть только 5-10 функций, если это имеет значение. Я очень мало знаю о том, что делает разные компиляторы несовместимыми. –
Это не имеет значения. Существуют различия в деталях реализации, которые спецификацию языка уходит в компилятор, есть отличия от соглашений о вызовах и так далее. – jason