Как создать ссылку на пакет в статической библиотеке с помощью Visual D
Я использую VisualD и DMD, чтобы написать D в Visual Studio 2012.
Мое решение выглядит так в обозревателе решений:
ConsoleApp1 (solution name)
- codecramlib (a static D library)
- - http (folder)
- - - package.d
- - - request.d
- malakai (console project)
- - main.d
codecramlib
Моя статическая D библиотека codecramlib
строит хорошо сам по себе. Вот источник:
в упаковке
module codecramlib.http;
public import request;
request.d
module request;
// temporary filler code
class Request
{
public int imARequest()
{
return 13;
}
}
Когда я нажимаю правой кнопкой мыши на codecramlib
и построить я получаю этот вывод в консоли VS:
------ Build started: Project: codecramlib, Configuration: Debug Win32 ------
Building Debug\codecramlib.lib...
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
Малакай (основной проект)
main.d:
import std.stdio;
import codecramlib.http; // also tried import codecramlib;
int main(string[] argv)
{
writeln("Hello D-World!");
return 0;
}
я добавил codecramlib
как зависимость малакай, щелкнув правой кнопкой мыши на malakai
выберите "Свойства"> "Свойства конфигурации"> "Компилятор"> "Общие" и измените поле "Дополнительные операции импорта" на "../codecramlib". Затем я нажимаю "Применить" и "ОК".
когда я щелкну правой кнопкой мыши на malakai
в обозревателе решений и нажмите кнопку Построить, я получаю эту ошибку:
Error 1 Error: module http is in file 'codecramlib\http.d' which cannot be read C:\Users\< path removed >\Visual Studio 2012\Projects\ConsoleApp1\malakai\main.d 2
Поиск проблемы
Первым делом я попытался изменить строку "Дополнительный импорт" на:
../
Похоже, это помогло, поскольку ошибка сборки была изменена на: Ошибка 1 Ошибка: запрос модуля находится в файле "request.d", который невозможно прочитать C:\Users\<путь удален>\Visual Studio 2012\Projects\ConsoleApp1\codecramlib\http\package.d 3
В попытке заставить компилятор распознать request.d в codecramlib
Статическая библиотека, я изменил package.d, чтобы читать:
module codecramlib.http;
public import http.request;
Похоже, это был шаг назад, потому что тогда библиотека codecramlib больше не создавалась, и когда я пытался собрать malakai, я получал следующие ошибки:
Error 1 Error: module request from file http\request.d must be imported as module 'request' C:\Users\< path removed >\Visual Studio 2012\Projects\ConsoleApp1\codecramlib\http\package.d 3
Error 2 Error: module request is in file 'http\request.d' which cannot be read C:\Users\< path removed >\Visual Studio 2012\Projects\ConsoleApp1\codecramlib\http\package.d 3
Как использовать пакет codecramlib.http в статической библиотеке codecramlib в моем проекте консоли malakai с Visual D?
редактировать
Исправлена структура моей папки, как показано в обозревателе решений. Мои отступы package.d и request.d были неверны.
Редактировать 2
Добавлен контент main.d
2 ответа
Эта часть
Первым делом я попытался изменить строку "Дополнительный импорт" на:
../
Похоже, это помогло, поскольку ошибка сборки была изменена на: Ошибка 1 Ошибка: запрос модуля находится в файле "request.d", который невозможно прочитать C:\Users\ <путь удален> \Visual Studio 2012\Projects\ConsoleApp1\codecramlib\http\package.d 3
заставляет меня поверить, что причина в том, что ваш модуль запроса не находится в пакете codecramlib.http, и из-за этого dmd не знает, как искать / codecramlib / http / для request.d.
Я предлагаю оставить поле "Дополнительный импорт" как "../" и переименовать модуль в codecramlib / http / request.d, чтобы codecramlib.http.request
и затем измените свой импорт в codecramlib / http / package.d на public import codecramlib.http.request
,
Вообще говоря, вы хотите сопоставить имена ваших модулей с макетом каталога.
Простой ответ заключается в том, что вы не можете импортировать весь пакет (папки в D, называемые пакетами), поэтому в ваш main.d следует импортировать codecramlib.http.request.
Кроме того, пакет не является библиотекой, вы не можете связываться с ним, а только импортировать модули, которые просто добавляют объявления из модуля в локальную область видимости.
В попытке заставить компилятор распознавать request.d в статической библиотеке codecramlib, я изменил package.d так, чтобы он читал:
модуль codecramlib.http;
публичный импорт http.request;
тем самым вы добавили модуль http в пакет codecramlib.http, и вы правы в том, что с помощью открытого импорта можно импортировать все, что связано с модулем, с одним оператором импорта в коде, поэтому в main.d теперь можно импортировать codecramlib.http..htpp, где первый http - это пакет, а второй - модуль, но я не рекомендую давать модулям то же имя, что и пакет, чтобы избежать конфликта имен.