2016-01-20 3 views
2

Я пытаюсь вызвать функцию C++ из модуля D. Я следил за руководством на этой странице http://dlang.org/spec/cpp_interface.html, но я не могу заставить его работать.Вызов статической библиотеки C++ из D

Я создал решение в visual studio 2015 с двумя проектами в нем: один проект D, а другой - проект на C++. Я создаю проект на C++ и создаю файл .lib. Затем в проекте D я установил путь к файлу lib в Configuration Properties -> Linker -> General -> Library Files, но когда я запустил решение, я получил Error43: Not Valid File File.

Заранее спасибо

+0

Visual Studio не поддерживает D из коробки, вы используете какой-то плагин? И какой D-компилятор вы используете? –

+0

Я использую Visual D 0.3.43 и dmd 2.069.2 –

ответ

2

Проблема заключается в том, что библиотека содержит COFF объектные файлы, но DMD ожидает, что они будут в формате OMF. (Взгляните на «Могу ли я связать файлы объектов C, созданные с помощью другого компилятора?» @https://dlang.org/faq.html)

Что вам нужно сделать, это преобразовать библиотеку в OMF для использования с DMD, используя, скажем, coff2omf tool. Этот инструмент является частью пакета расширения DigitalMars (см. Раздел freecompiler download). Или, если можно, используйте компилятор C++, такой как компилятор DigitalMars C/C++, для создания библиотеки OMF.

Кроме того, обратите внимание на: Converting COFF lib file to OMF format

+0

У вас есть ссылка на инструмент? Я не могу найти способ загрузить его в любом месте. –

+0

dmd для win32 может выводить кофф с нескольких месяцев (переключатель __- ms32coff__), который вы можете сделать вместо преобразования. Другой вариант - создать динамическую библиотеку в C++. –

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