2012-02-21 1 views
1

Недавно я получил SDK с закрытым исходным кодом, состоящий из файла заголовка C (.h), файла библиотеки (.lib) и динамической библиотеки (.dll). Они были скомпилированы с использованием Microsoft Visual C++. Тем не менее, я пытаюсь написать свой код с помощью MinGW (GCC портирован на Windows, для любого, кто не знаком с проектом). Похоже, что ld не может ссылаться на файл .lib. Мне было интересно, можно ли написать оболочку совместимости между VS-компилированным кодом и кодом GCC, который я пишу.Написание GCC-совместимой обертки вокруг файла .lib

+3

Я был бы в шоке, если бы вы могли снять это без усилий геркулеса. – jason

+0

В исходном SDK, вероятно, есть только 5-10 функций, если это имеет значение. Я очень мало знаю о том, что делает разные компиляторы несовместимыми. –

+0

Это не имеет значения. Существуют различия в деталях реализации, которые спецификацию языка уходит в компилятор, есть отличия от соглашений о вызовах и так далее. – jason

ответ

1

Есть ли несоответствие ABI или он просто не хочет связываться с форматом объекта? Если это просто проблема связывания, вы можете извлечь нужные вам функции, разобрать их, а затем собрать их в объект, с которым может работать ваш компоновщик. Еще проще, может objcopy(1) может говорить в обоих форматах и ​​может вам помочь?

Если у вас есть проблема с ABI, вы можете сделать то же самое, но также добавить слой прокладок, чтобы взломать ABI так, чтобы вызовы функций работали. Насколько сложным является этот уровень и насколько сложным он будет писать, будет зависеть от интерфейсов функций, которые вы пытаетесь использовать.

Не слишком обескураживайте комментарии - это программное обеспечение, поэтому довольно что-нибудь возможно.

+0

Я не сказал, что это невозможно; конечно, это возможно. Я сказал, что буду удивлен, если это будет легко. – jason

+0

По моему опыту, занимающемуся подобным делом, требуется немного времени, чтобы размахивать разборкой во что-то новое, что может быть связано с новой инструментальной цепью, но это все. Если вам нужно взломать ABI, это еще одно усилие, но я бы не стал описывать это как сложное - конечно, это зависит от того, будете ли вы распространять типы va_list или что-то еще. –

+0

На данный момент кажется, что он просто не хочет связываться. Я указываю 'ld.exe' в файле' .lib', и он говорит мне, что не может его найти. Изучив это в течение последних нескольких часов, кажется, что это не потому, что на самом деле он не видит файл, а потому, что он не видит полезный файл. Тем не менее, исправления приветствуются. –

Смежные вопросы