On Thursday, 2 July 2015 at 12:36:35 UTC, Nicholas Wilson wrote:
On Thursday, 2 July 2015 at 03:07:43 UTC, Matthew Gamble wrote:
I am trying to make the transition from C++ to D. I've hit a
snag with the etc.c.zlib module where any attempt to use this
module to open a file yields an error:
Error 42: Symbol Undefined __lseeki64.
Here is a simple example of code that gives the error upon
compilation.
import std.stdio;
import etc.c.zlib;
void main(string[] args)
{
char[] fName = "C:\\Users\\Matthew
Gamble\\Documents\\sample.bam\0".dup;
char[] mode ="r\0".dup;
gzFile bamFile; //no error here
bamFile = gzopen(&fName[0],&mode[0]); //this is where the
error hits
}
Is that a compiler error or a linker error?
I'm probably doing something obviously wrong, so have mercy. If
etc.c.zlib
is not the preferred way to read from a binary gzipped file
any advice would be appreciated. Thanks.
char[] fName = "C:\\Users\\Matthew
Gamble\\Documents\\sample.bam\0".dup;
bamFile = gzopen(&fName[0],&mode[0]);
would be probably be more easily understood if written as:
string fName = "C:\\Users\\Matthew
Gamble\\Documents\\sample.bam";
bamFile = gzopen(fName.ptr,mode.ptr);
as string _literals_ are nul terminated in D ( but not
dynamically constructed ones: use .toStringz on them) assuming
that gzopen doesn't manipulate it's arguments (I would very
much doubt that).
Also if you're trying to do bam parsing/manipulating/whatever
try to get a hold of Artem Tarasov who occasionally posts on
these forums. He wrote the worlds fastest bam parser in D. He
might be able to give you some hints on further questions.
Thanks for the style tips. I will incorporate them in the future.
I was digging through Artem's BAM parser code and it also makes
use of a stripped down version of etc.c.zlib, so it seems like I
would have the same problem if I was to compile his parser, but I
can try that and perhaps alter my program to make use of pipes
from Sambamba. That's not something I've considered before.
However, I only need the positional and flag information from the
BAM files and I have previously written a parser in C++ using
zlib that could do the job. I was just trying to move that parser
over to D as a learning experience and so that I could easily
incorporate it with the other programs I will write in D.
Here is the full output upon building the program in VS2013 with
Visual D:
------ Build started: Project: zlibTest, Configuration: Release
Win32 ------
Building Release\zlibTest.exe...
OPTLINK (R) for Win32 Release 8.00.17
Copyright (C) Digital Mars 1989-2013 All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
C:\D\dmd2\windows\bin\..\lib\phobos.lib(gzlib)
Error 42: Symbol Undefined __lseeki64
Building Release\zlibTest.exe failed!
Details saved as "file://C:\Users\Matthew Gamble\documents\visual
studio
2013\Projects\file_readers\ConsoleApp1\Release\zlibTest.buildlog.html"
========== Build: 0 succeeded, 1 failed, 1 up-to-date, 0 skipped
==========
Seems like a linking issue. I tried adding
"C:\D\dmd2\windows\lib" to the lib search path in the linker
properties in VS, But that did not help.
I would have thought that linking to a module in phobos would be
automatic, like for std.stdio. Is that not the case?
Any advice or tips would be appreciated.
Thanks,
Matt