www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - gtkd.lib: Error 43: Not a Valid Library File

reply Enjoys Math <enjoysmath gmail.com> writes:
I get this message either compiling at command line -or- in 
VisualD.

At command line when I add -m64, I get another error:


C:\MyProjects\___LIGHTSHOWAPP\___LIGHTSHOWAPP>dmd -m64 main.d 
-L+gtkd
LINK : fatal error LNK1181: cannot open input file '+gtkd.obj'
--- errorlevel 1181
Jan 26
parent reply Enjoys Math <enjoysmath gmail.com> writes:
On Tuesday, 26 January 2016 at 22:10:42 UTC, Enjoys Math wrote:
 I get this message either compiling at command line -or- in 
 VisualD.

 At command line when I add -m64, I get another error:


 C:\MyProjects\___LIGHTSHOWAPP\___LIGHTSHOWAPP>dmd -m64 main.d 
 -L+gtkd
 LINK : fatal error LNK1181: cannot open input file '+gtkd.obj'
 --- errorlevel 1181
Got it to compile and run at command line! The proper command line is: dmd main.d -m64 -Lgtkd.lib (without +, with .lib)
Jan 26
parent reply Mike Parker <aldacron gmail.com> writes:
On Tuesday, 26 January 2016 at 22:30:24 UTC, Enjoys Math wrote:
 On Tuesday, 26 January 2016 at 22:10:42 UTC, Enjoys Math wrote:
 I get this message either compiling at command line -or- in 
 VisualD.

 At command line when I add -m64, I get another error:


 C:\MyProjects\___LIGHTSHOWAPP\___LIGHTSHOWAPP>dmd -m64 main.d 
 -L+gtkd
 LINK : fatal error LNK1181: cannot open input file '+gtkd.obj'
 --- errorlevel 1181
Got it to compile and run at command line! The proper command line is: dmd main.d -m64 -Lgtkd.lib (without +, with .lib)
You appear to have a lack of understanding of linker options. If I'm wrong, just ignore the rest of this post. -L tells DMD to pass an argument to the linker. Each linker it uses accepts options in a different format. The + you used above has no connection library files on any linker. It's used by OPTLINK, the default linker DMD uses, to set a path on which to search for libraries. So, if you had all of your libraries in C:\mylibs, then you could pass this to dmd: dmd -L+C:\mylibs main.d -Lgtkd.lib After compiling main.d, DMD will call optlink with +C\mylibs and, assuming gtkd.lib is in that directory, optlink will find it. When you use -m64 (or -m32mscoff), DMD is using the Microsoft Linker. It will not recognize the +, as it has a different syntax for specifying the path. dmd -L/LIBPATH:C:\mylibs main.d -Lgtkd.lib In both cases, you can actually drop the -L when specifying the libraries: dmd -L+C:\mylibs main.d gtkd.lib dmd -L/LIBPATH:C:\mylibs main.d gtkd.lib Here, dmd will recognize the .lib extension and will pass the library names to the linker without the need for -L. When compiling on other platforms where DMD uses the GNU (or compatible) linker, it would look like this: dmd -L-L/path/to/mylibs -L-lgtkd This linker accepts -L as the switch to specify the path, so -L-L tells DMD to send that on. It also requires -l (lowercase l) to specify libraries, so -L-l will do that. The linker will actually convert the 'gtkd' string to libgtkd.a or libgtkd.so. I can't recall if passing either, with the extension, on the command line without -L-l (e.g. libgtkd.a or libgtkd.so) works or not.
Jan 26
parent Mike Parker <aldacron gmail.com> writes:
On Wednesday, 27 January 2016 at 01:20:49 UTC, Mike Parker wrote:
 has no connection library files
has no relationship with library files What I mean is it is not used to specify libraries.
Jan 26