2015-09-21 2 views
1

Я работаю с Embarcadero XE8 C++ builder 32 бит.Ошибка компоновщика "содержит недопустимую запись OMF" 2

Я добавлял библиотеку в свою программу для решения Unresolved external error.

Когда я добавил библиотеку, я получил ошибку, как в названии. Так что я искал в Интернете и нашел эту тему в stackoverflow: Linker error "contains invalid OMF record"

Как говорится, инструмент COFF2OMF, CAN работает. К сожалению, это не сработало для меня, я даю файл библиотеки 7mb, когда я конвертирую его с помощью инструмента, это всего лишь 41 кб ... поэтому я думаю, что конвертация не удалась. Когда я добавляю преобразованные файлы в свою программу, он просто игнорирует его и все еще говорит unresolved external error.

Как я могу заставить свою библиотеку работать с моим C++-конструктором?

+0

Файлы OMF меньше, чем файлы COFF. Поэтому вы не можете быть уверены, что разговор не удался. Как вы относитесь к Embarcadero? С прагмой? –

+0

Ну, я добавил две новые преобразованные библиотеки, и она просто игнорирует их, поскольку она дает ту же ошибку, что и раньше. – Bart

+0

Как вы связываете эту библиотеку? Можете ли вы проверить командную строку компоновщика, если там присутствует OMF-lib? –

ответ

2

Немного предыстории:

Библиотеки должна быть скомпилирована с таким же инструментом, как приложения, которое вы пытаетесь сделать, потому что каждый компилятор делает вещи чуть-чуть по-другому. Большинство библиотек для Windows скомпилированы с MVSC (Microsoft Visual Studio Compiler).

Вы используете компилятор Embarcardero, что означает, что библиотеки MVSC несовместимы (возможно, вы заметили это;)).

У вас есть несколько вариантов.

  1. Если вы можете, получите источник библиотеки и скомпилируйте ее с помощью собственного компилятора. Таким образом, шансы на успех - самые высокие.
  2. Возможно, я ошибаюсь, так как это было какое-то время, однако я считаю, что есть инструмент под названием implib, который берет общую библиотеку (DLL) и генерирует .lib из Embarcardero-style, который используется для вашего проекта.
  3. Используйте COFF2OMF, чтобы преобразовать статическую библиотеку. И даже если размер файла странный, попробуйте хотя бы попробовать.
  4. Попробуйте вызов функции LoadLibrary. Это требует, чтобы вы набросали нужные вам функции вручную, однако вы обойдетесь, используя .lib.

Удачи.

+0

1. Как я могу получить источник? просто открыть файл с помощью блокнота и скопировать его? и как я могу скомпилировать библиотеку? 2. Не уверен, что мне нужен DLL-формат библиотеки, чтобы проверить это. 3. Сделано, что это не сработало. 4. Я исследую это :) Спасибо за варианты! – Bart

+0

@Bart Это зависит, действительно. Обычно, если это библиотека с открытым исходным кодом, вы можете скачать источник отдельно от того места, где вы получили библиотеку (большинство людей не заботятся об источниках, и они могут быть довольно большими в сравнении, поэтому они часто не используют получать вместе с двоичными файлами). Вы получили кучу .c /.cpp файлы с вашей библиотекой? Вы создаете проект, выбираете 'library', добавляете исходные файлы, нажимаете« Build »и пересекаете пальцы. Удачи. :) –

+0

Когда я создаю новый проект как статическую библиотеку (я не могу создать обычную библиотеку), это дает мне пустой Project.lib. Я не могу входить ни в какой текст. Когда я добавляю файлы dll, он ничего не делает с ними. Я не могу добавить файл .lib. Также, если я открываю DLL-файлы, это просто некоторые случайные знаки, которые я не могу прочитать. – Bart

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