Флаг -L
указывает компоновщику добавить конкретный каталог в путь поиска.
-l
сообщает ему ссылку на определенную библиотеку, и он выполняет поиск по пути поиска, чтобы найти эту библиотеку.
При использовании DMD вы должны передавать флаги компоновщику с флагом -L
. Он может принимать как абсолютные, так и относительные пути, но пути должны указываться относительно того, откуда запускается компилятор. Поэтому, если вы используете относительные пути, вам всегда нужно запускать компилятор из одного и того же каталога (что обычно не является проблемой, поскольку обычно команда сборки находится в Makefile
, которую вы всегда запускаете из одного и того же каталога). каталог).
Чаще всего используют абсолютные пути для библиотек, установленных в системе, и относительные пути для библиотек, специфичных для вашего проекта.
Итак, если у вас есть библиотека myzlib/lib/libz.a
, вы должны передать -L-Lmyzlib/lib -L-lz
в dmd
.
Затем он добавит myzlib/lib
к пути поиска компоновщика, а затем будет искать libz.a
в своем пути поиска (компоновщик знает, что нужно взять часть, следующую за -l
, добавить lib перед ней и добавить суффикс .a
в конец, чтобы получить библиотеку, которую вы ищете).
Вы можете добавить флаги компоновщика к dmd.conf
, но я бы не советовал этого делать. Флаги в dmd.conf
— это то, что dmd всегда использует для каждой программы. Таким образом, у вас должны быть только те флаги, которые используются во всех ваших программах.
Лучше передать их в dmd напрямую (будь то в командной строке или как часть Makefile
).
Что касается файлов заголовков, вам нужно будет продублировать все их объявления, которые вам нужны, в файле .d
.
Заголовочные файлы используются компилятором C или C++, а не компоновщиком. D использует тот же компоновщик, что и для C или C++, но его компилятор dmd
, а не gcc
.
Итак, вам нужно продублировать объявления C в файле D. Проще всего это сделать с помощью htod
утилиты, но она работает только в Windows. или вино.
В любом случае вам нужно объявить объявления C, которые вы будете использовать, в файле .d
и пометить их extern(C)
.
person
Jonathan M Davis
schedule
20.02.2011