www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - how to link self made lib using dub

reply Flaze07 <christianseiji.cs gmail.com> writes:
I have been trying to link self made .lib, and have tried to use 
it several times, I failed..
so, here I have a file in this path : 
Z:\programming\D\usefulFiles\experiment\source\output.d

it has

module output;

class Output {
public:
     static void write( string msg ) {
         import std.stdio;
         writeln( msg );
     }
}

and then I compiled it into library using dub project with this 
file in a path : Z:\programming\D\usefulFiles\experiment\dub.json

{
   "name" : "experiment",
   "targetType": "library",
   "targetPath": "lib",
   "sourcePaths": [
     "source",
   ],
}

then, I made a project, with this main in this path : 
Z:\programming\D\experimentLib\source\main.d

it contains this

module main;

import std.stdio;

import source.output;

void main( string[] args ) {
     Output.write( "lol" );
     readln();
}

and then, I have a dub file in this path : 
Z:\programming\D\experimentLib\dub.json

it contains :

{
   "name" : "experimentlib",
   "targetType": "executable",
   "targetPath": "bin",
   "importPaths": [
     "Z:\\programming\\D\\usefulFiles\\experiment\\",
   ],
   "lflags": [
     "+Z:\\programming\\D\\usefulFiles\\experiment\\lib\\",
   ],
}

so, I have made lflags to include the lib in experiment, but 
still, it failed to linker ( it compiles fine, but the linker 
fails )
Jul 06 2018
parent reply Timoses <timosesu gmail.com> writes:
On Friday, 6 July 2018 at 17:08:48 UTC, Flaze07 wrote:
 [...]
 then, I made a project, with this main in this path : 
 Z:\programming\D\experimentLib\source\main.d

 it contains this

 module main;

 import std.stdio;

 import source.output;
Shouldn't this be 'import output'?
 void main( string[] args ) {
     Output.write( "lol" );
     readln();
 }

 and then, I have a dub file in this path : 
 Z:\programming\D\experimentLib\dub.json

 it contains :

 {
   "name" : "experimentlib",
   "targetType": "executable",
   "targetPath": "bin",
   "importPaths": [
     "Z:\\programming\\D\\usefulFiles\\experiment\\",
and this '...\\experiment\\source\\'? (I'm not accustomed to Windows..)
   ],
   "lflags": [
     "+Z:\\programming\\D\\usefulFiles\\experiment\\lib\\",
   ],
 }

 so, I have made lflags to include the lib in experiment, but 
 still, it failed to linker ( it compiles fine, but the linker 
 fails )
You could also add a dependency to your other dub project and dub should automatically add the import and linker flags. Add this to your dub.json: "dependencies": { "experiment": {"version": "*", "path": "../experiment"} } I didn't test this now, but it should work something like that (again, not sure about Windows path...). See also: http://code.dlang.org/package-format?lang=json#version-specs
Jul 06 2018
parent Flaze07 <christianseiji.cs gmail.com> writes:
On Friday, 6 July 2018 at 21:13:37 UTC, Timoses wrote:
 Shouldn't this be 'import output'?
nah, because I didn't import source directly, I import experiment so in order to use it, I do source/output.d, which when importing module means, source.output
 and this '...\\experiment\\source\\'? (I'm not accustomed to 
 Windows..)
nope, because I want to do make some sort of a package thing
 You could also add a dependency to your other dub project and 
 dub should automatically add the import and linker flags.
 Add this to your dub.json:

 "dependencies":
 {
     "experiment": {"version": "*", "path": "../experiment"}
 }

 I didn't test this now, but it should work something like that 
 (again, not sure about Windows path...).

 See also: 
 http://code.dlang.org/package-format?lang=json#version-specs
huh, didn't know I could do that
Jul 06 2018