2014-02-02 3 views
1

Я разрабатываю проект под Visual D. В решении у меня есть один проект библиотеки и один исполняемый проект. Вопрос в том, как связать проект библиотеки (использовать модули оттуда) в исполняемом проекте?VisualD. Использование внешнего .lib

Я пытался добавить библиотеку пути поиска в настройках проекта, но это не вступило в силу и компилятор до сих пор написал эту ошибку:

Update 1 После нескольких экспериментов я обнаружил, что проблема с компилятор. Я установил Xamarin Studio, добавил lib и исполняемые проекты, проверил проект lib как зависимость для exectutable проекта, Xamarin Studio нашел (!!!) модули и пространства имен из проекта lib, , но компилятор все еще написал эту тупую ошибку. В журнале сборки Xamarin присутствует полный квалифицированный путь к библиотеке lib. (Для справки, я использую Windows 7 x86)

Update 2 Я оттолкнул свой проект GitHub, если вы хотите, чтобы попытаться скомпилировать его - вы радушны.

Update 3 Я уже опробовали компиляции в MonoDevelop на свежем Ubuntu 13.10, и по-прежнему представляет эту ошибку. Я думаю, что, может быть, моя проблема с orginizing файловой структурой или структурой проекта ...

+0

Есть ли опция для VS для включения/импорта пути? (Я никогда не использовал его, но ошибка в том, что он не может найти модуль импорта .d, а не библиотеку .lib) –

+0

Спасибо за ответ!Я попытался найти эти варианты, но unsuccessfull = ( – alex025

ответ

0

Я обнаружил, что проблема связана с файловой структурой. По какой-то странной причине, в D Вы не можете создавать вложенные проекты с таким же названием, как модуль

ядра \ MyClass.d:

module Core.MyClass; 

class MyClass { 
    //some stuff 
} 

, а затем использовать его как:

import Core.MyClass; 

потому что когда вы связываете lib, это пространство имен будет смешиваться в вашем глобальном пространстве имен, но структура модуля не будет соблюдаться. Будет следовать структура файла, такая как структура модуля. Это происходит на всех компиляторов (DMD, dmd2, ldc2, GDC). И это очень странно, потому что C# или ActionScript позволяют это, и это нормальная логика. Любые идеи, как организовать некоторую структуру, как показано ниже?

import Root.Sub.Target; 
2

Вам нужен файл .d, в котором есть все прототипы и типы функций, такие как заголовочный файл C. В этом файле вы можете добавить строку pragma(lib, "TestObject");, чтобы сообщить компилятору, что ему нужно связать с этим модулем. Я считаю, что модули находятся в стандартном пути импорта -I, поэтому попробуйте добавить туда путь к модулю.

+0

Можете ли вы указать, где должен находиться этот файл? – alex025

+0

И правильно ли предположить, что опция -I должна быть в командной строке Visual D? – alex025

+0

Я добавил -h компилятор что добавляет файл интерфейса di, но это не принесло никакого эффекта :( – alex025

2

Если я правильно понял, у вас есть два проекта в решении и хотите, чтобы проект exe автоматически связывался с проектом lib? Вы просто щелкаете правой кнопкой мыши по проекту exe в средстве просмотра решений и добавляете lib как зависимость от сборки.

+0

Это не сработало :(Я думаю, что это ошибка в Visual D ... – alex025

+1

Какая Visual Studio вы используете? Какая версия VisualD? Как вы видите [здесь] (http://www.dsource.org/projects/visuald/wiki/Features) Главной особенностью VisualD является то, что: «автоматическая связь между зависимыми проектами». Я просто попытался использовать VS 2013 и VD 0.3 .38-beta2 из [здесь] (https://github.com/D-Programming-Language/visuald/releases), и он работает. В качестве альтернативы вы можете попробовать [mono-d] (http: // mono-d. alexanderbothe.com/) как D IDE. Я также рекомендовал бы использовать диспетчер пакетов dub, чтобы описать проект strucutre. Он может генерировать файлы решения visuald для вас (в зависимости от условий) – Extrawurst

+0

Как я уже говорил в названии, я использую VS 2012. Я постараюсь использовать VS 2013 – alex025

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