October 22, 2014
On 10/22/2014 2:37 AM, Edn wrote:

> Anyways, would
> deimos/glfw/glfw3.d
> be needed if I have
> import glfw.glfw3;
> in my main.d ?

You should be importing deimos.glfw.glfw3, I believe. But the answer is yes. Import statements tell the compiler which symbols are available when compiling a specific module. It does not tell the compiler that you also want to compile the imported module.

If you have compiled the deimos module into a library, then you do not need to pass glfw3.d. You would instead link with the library. However, you *always* need to import the modules you want to use.

BTW, posts like this probably belong in the digitalmars.D.learn[1].

[1] http://forum.dlang.org/group/digitalmars.D.learn

---
This email is free from viruses and malware because avast! Antivirus protection is active.
http://www.avast.com

October 22, 2014
On Wednesday, 22 October 2014 at 01:45:07 UTC, Mike Parker wrote:
> On 10/22/2014 2:37 AM, Edn wrote:
>
>> Anyways, would
>> deimos/glfw/glfw3.d
>> be needed if I have
>> import glfw.glfw3;
>> in my main.d ?
>
> You should be importing deimos.glfw.glfw3, I believe. But the answer is yes. Import statements tell the compiler which symbols are available when compiling a specific module. It does not tell the compiler that you also want to compile the imported module.
>
> If you have compiled the deimos module into a library, then you do not need to pass glfw3.d. You would instead link with the library. However, you *always* need to import the modules you want to use.
>
> BTW, posts like this probably belong in the digitalmars.D.learn[1].
>
> [1] http://forum.dlang.org/group/digitalmars.D.learn
>
> ---
> This email is free from viruses and malware because avast! Antivirus protection is active.
> http://www.avast.com

Great, thanks!
October 22, 2014
On Wednesday, 22 October 2014 at 01:45:07 UTC, Mike Parker wrote:
> On 10/22/2014 2:37 AM, Edn wrote:
>
>> Anyways, would
>> deimos/glfw/glfw3.d
>> be needed if I have
>> import glfw.glfw3;
>> in my main.d ?
>
> You should be importing deimos.glfw.glfw3, I believe. But the answer is yes. Import statements tell the compiler which symbols are available when compiling a specific module. It does not tell the compiler that you also want to compile the imported module.
>
> If you have compiled the deimos module into a library, then you do not need to pass glfw3.d. You would instead link with the library. However, you *always* need to import the modules you want to use.
>
> BTW, posts like this probably belong in the digitalmars.D.learn[1].
>
> [1] http://forum.dlang.org/group/digitalmars.D.learn
>
> ---
> This email is free from viruses and malware because avast! Antivirus protection is active.
> http://www.avast.com

Hello again,

I get this error :

dmd -m64 main.d lib/glfw/glfw3.d glfw.lib
LINK : fatal error LNK1104: cannot open file 'glfw.lib'
--- errorlevel 1104
October 23, 2014
On 10/23/2014 2:51 AM, Edn wrote:

>
> I get this error :
>
> dmd -m64 main.d lib/glfw/glfw3.d glfw.lib
> LINK : fatal error LNK1104: cannot open file 'glfw.lib'
> --- errorlevel 1104

Did you download and compile GLFW3 as a static library? If so, then whatever lib file that resulted needs to be somewhere the linker can find it. IIRC, it's probably called glfw3.lib. If it's in a subdirectory of your project, then you should refer to it by the relative path. If you're keeping it somewhere else on your system, then you either need to refer to it by the full path or to add it to the library path via the command line so the linker can find it. For the latter, you need to use whatever syntax the current linker understands (OPTLINK when compiling 32-bit on Windows, VS LINK when compiling 64-bit on Windows, or the GCC linker on other systems).

So, let's assume you've done the following:

1) Download and compiled the C GLFW3 library and the output is called 'glfw3.lib'.

2) You've got the source set up like you show above:

-project
--main.d
--lib
---glfw
----glfw3.d

Let me make a recommendation that will make things a little more coherent. Set up your project this way:

-project
--source
---main.d
---glfw
----glfw3.d
--lib
---glfw3.lib

Notice how I've copied glfw3 to the 'lib' directory Now I can do the following:

cd project
dmd -m64 -Isource source/main.d source/glfw/glfw3.d lib/glfw3.lib

Notice that I passed the -I switch to tell DMD to look for imports inside the source directory. That way, it won't try to use 'source' as a package name. If I were compiling inside the source directory (i.e. cd project/source) I wouldn't need to do that.

Let's say you want to use glfw3.lib with multiple projects and want to have it in a common location. Then the project structure will be the same, but now without the 'lib' directory. So let's say you've copied glfw3.lib to somewhere like C:\libs. Then you can do this:

cd project
dmd -m64 -Isource -L/LIBPATH:C:\libs source/main.d source/glfw/glfw3.d glfw3.lib

The -L switch tells dmd to pass whatever follows it to the linker. /LIBPATH is how you tell the VS linker where to look for libraries (I haven't tested this myself, but it's what the docs at [1] say). Now, when it encounters glfw3.lib, it will search in that path. If you were compiling on Linux, it would look like:

-L-L/path/to/libs

The first -L is for DMD and the second is for the linker, since that's the flag the gcc linker uses to set the library search path [2].

And with 32-bit compilation on Windows using OPTLINK, it looks even different [3]:

-L+C:\libs

You always need to be aware that the compiler can parese imports it can't find & can't compile source you don't tell it to, and the linker can't link libraries it can't find. When you're dealing with multiple source files and libraries, compiling on the command line can be very burdonsome, which is why build tools exist. Something like DUB makes this all go away. Then building (usually) becomes as easy as:

cd project
dub build

I'm not recommending you switch to DUB right now, since understanding command line compilation is an important skill, but once you *are* comfortable with it, switching to DUB will make your life easier.

[1] http://msdn.microsoft.com/en-us/library/1xhzskbe.aspx
[2] https://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html
[3] http://www.prowiki.org/wiki4d/wiki.cgi?D__Tutorial/CompilingLinkingD#PassingsearchdirectoriesforstaticlibraryfilestoOptlink


October 23, 2014
On 10/23/2014 5:22 PM, Mike Parker wrote:
> the compiler can parese imports

/can't parse/
1 2
Next ›   Last »