Связывание файлов C .obj с приложением Delphi, разрешение стандартных зависимостей C

Я скомпилировал libxml2 с компилятором командной строки BCC 5.5, теперь у меня есть много файлов .obj, которые я хотел бы связать со своим приложением Delphi. К сожалению, я получаю много ошибок «Неудовлетворенное прямое или внешнее объявление», указывающих на стандартные функции библиотеки C, такие как memcpy, open, recv и т. д. Что мне нужно сделать, чтобы правильно скомпилировать его? Я хотел бы избежать зависимости от msvcrt.dll или любых других внешних библиотек.

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


person migajek    schedule 27.12.2009    source источник


Ответы (3)


В зависимости от вашей версии Delphi должен быть модуль crtl.dcu, с которым вы можете установить связь. Просто используйте директиву $L для каждого файла .obj в модуле, который также использует crtl. Вам также может понадобиться «использовать» другие различные устройства, такие как Windows, WinSock и т. д. Суть в том, чтобы предоставить символы и функции для разрешения на этапе связывания.

Это тот же метод, который используется для статической компоновки в коде DataSnap TClientDataSet, используемом также для сборки midas.dll.

person Allen Bauer    schedule 27.12.2009
comment
к сожалению, в моей установке Delphi нет модуля crtl... это Delphi7 PE. - person migajek; 27.12.2009
comment
Звучит как отличный повод обновиться хотя бы до D2007 ;-) - person Allen Bauer; 28.12.2009

вы должны прочитать статью Руди здесь "Использование объектных файлов C в Delphi"

person flashvnn    schedule 28.12.2009
comment
Добро пожаловать в Stack Overflow. Это хорошая статья, но чтобы сделать этот ответ лучше, вы должны объяснить, почему это хорошая статья для чтения. Подскажите чего ожидать. В частности, в этой статье описаны два метода решения проблемы. Один из них — вручную реализовать все недостающие функции. (Статья демонстрирует.) Другой способ — связать с msvcrt.dll, в котором уже есть реализации всех недостающих функций. (Статья также демонстрирует это.) Второй способ особенно хорош для таких функций, как printf, которые не могут быть легко реализованы в Delphi. - person Rob Kennedy; 28.12.2009
comment
Кроме того, MSVC++ может быть скомпилирован с опцией создания asm, а затем ml.exe превращает необходимые obj в $L в Delphi. - person Serg; 31.01.2020

Не используйте эти функции, а перепишите их для прямого вызова функций операционной системы (kernel32/system32).

person Marco van de Voort    schedule 27.12.2009
comment
код C, который я компилирую, - это libxml2, который довольно сложен, и я бы хотел избежать каких-либо изменений. - person migajek; 27.12.2009
comment
@michal: Вы знаете, что для LibXML2 доступно несколько десятков бесплатных оболочек Delphi, верно? Вот один из них, рекомендованный Марко Канту: sourceforge.net/projects/libxml2-pas. Рекомендацию блога Марко по этой реализации можно найти по адресу blog.marcocantu.com/blog/delphicomps.html< /а> - person Ken White; 29.12.2009
comment
Для какой именно libxml2? Там куча сборок. - person Marco van de Voort; 30.12.2009
comment
Хм, я понятия не имел ... тот, который проверен со страницы libxml2? - person migajek; 31.12.2009
comment
Кен, я знаю это. Я просто хочу избежать дополнительных DLL. - person migajek; 31.12.2009