dub, ldc2, MS VS 2015, static c library

dm via digitalmars-d-ldc digitalmars-d-ldc at puremagic.com
Thu Dec 15 19:37:14 PST 2016


Hi!
I'm trying to build my static c library and use it with my d 
application.
I'm making a library as described here: 
https://msdn.microsoft.com/en-us/library/ms235627(v=vs.90).aspx

My MS VS solution have file funcs.cpp:
```
#include <stdint.h>

int32_t myFunc(int32_t a, int32_t b)
{
	return a + b;
}
```
I'm build my library. Build is Release, target - x64. Got file 
mylib.lib.

Next I make app.d:
```
import std.stdio;

extern (C) int myFunc(int, int);

void main()
{
	writeln(myFunc(1, 2));
}
```

I put mylib.lib in root of my dub project:
```
E:\D\sl>ls
dub.sdl  mylib.lib  source

E:\D\sl>cat dub.sdl
name "sl"
description "A minimal D application."
libs-windows "mylib"
libs-posix "mylib"
dflags "-O5" "-m64" "-release" "-w"
```

Next I'm trying to build my app:
```
E:\D\sl>dub build --build=release --compiler=ldc2

## Warning for package sl ##

The following compiler flags have been specified in the package 
description
file. They are handled by DUB and direct use in packages is 
discouraged.
Alternatively, you can set the DFLAGS environment variable to 
pass custom flags
to the compiler, or use one of the suggestions below:

-m64: Use --arch=x86/--arch=x86_64 to specify the target 
architecture
-release: Call dub with --build=release
-w: Use "buildRequirements" to control warning behavior

Performing "release" build using ldc2 for x86.
sl ~master: building configuration "application"...
Using Visual Studio: C:\Program Files (x86)\Microsoft Visual 
Studio 14.0\
sl.obj : error LNK2019: unresolved external symbol myFunc 
referenced in function _Dmain
.dub\build\application-release-windows-x86-ldc_0-9C4A611E39233F32B4FA0F867429B08B\sl.exe : fatal error LNK1120: 1 unresolved externals
Error: `C:\Windows\system32\cmd.exe /s /c "C:\ldc\bin\amd64.bat 
link.exe"` failed with status: 1120
ldc2 failed with exit code 1120.
```

ldc version:
```
E:\D\sl>ldc2 -version
LDC - the LLVM D compiler (0.17.1):
   based on DMD v2.068.2 and LLVM 3.7.1
   Default target: x86_64-pc-windows-msvc
   Host CPU: ivybridge
   http://dlang.org - http://wiki.dlang.org/LDC

   Registered Targets:
     arm      - ARM
     armeb    - ARM (big endian)
     cpp      - C++ backend
     mips     - Mips
     mips64   - Mips64 [experimental]
     mips64el - Mips64el [experimental]
     mipsel   - Mipsel
     ppc32    - PowerPC 32
     ppc64    - PowerPC 64
     ppc64le  - PowerPC 64 LE
     sparc    - Sparc
     sparcel  - Sparc LE
     sparcv9  - Sparc V9
     thumb    - Thumb
     thumbeb  - Thumb (big endian)
     x86      - 32-bit X86: Pentium-Pro and above
     x86-64   - 64-bit X86: EM64T and AMD64
```

What I'm doing wrong?


More information about the digitalmars-d-ldc mailing list