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