Hi all,
I've encountered several issues while compiling Poppler 0.61.0 for Scribus. I'm
currently
using Visual Studio 2015.
The first round of issues are compiler errors caused by an undeclared strtok_r
function.
The build failure has been introduced by commit
555e2ea6b6f80a6f79eeaa44a39c24dc8461e78c
which moved the declaration of strtok_r from poppler-config.h to goo/glibc.h.
Unfortunately while doing so, that commit failed to include "goo/glibc.h" in
files using
the strtok_r function. As MSVC C library does not provide that function, this
logically
triggers a compiler error due to the missing function declaration.
The files missing the "goo/glibc.h" include are:
- poppler/CharCodeToUnicode.cc
- poppler/GlobalParams.cc
- poppler/PDFDoc.cc
- poppler/UnicodeMap.cc
You will find in attachments a patch which fixes this issue.
Secondly, an inconsistency exists between the strtok_r declaration and its
implementation:
goo/glibc.h encloses functions declaration with an extern "C" { ... }, however
the
implementation of strtok_r located in glibc_strtok_r.cc, which MSVC compiles as
C++, is
not enclosed with the same extern "C" { ... }. As a consequence the
implementation uses
the C++ function name mangling. In the end this triggers a linker error, the
linker not
being able to find a strtok_r implementation with "C" mangling. Note that the
same issue
exists also in goo/glibc.cc file.
So depending on what you really want to do, I'd suggest one of these three
solutions:
- removing the extern "C" {...} in goo/glibc.h
- adding the appropriate extern "C" {...} in glibc_strtok_r.cc and goo/glibc.cc
- renaming glibc_strtok_r.cc and glibc.cc by using a simple .c extension.
The third solution will force MSVC to use the C compiler by default for these
two files.
Jean Ghali
diff -u -r a/poppler/CharCodeToUnicode.cc b/poppler/CharCodeToUnicode.cc
--- a/poppler/CharCodeToUnicode.cc 2017-11-03 11:25:02.000000000 +0100
+++ b/poppler/CharCodeToUnicode.cc 2017-11-11 01:14:46.821015300 +0100
@@ -38,6 +38,7 @@
#include <stdio.h>
#include <string.h>
+#include "goo/glibc.h"
#include "goo/gmem.h"
#include "goo/gfile.h"
#include "goo/GooLikely.h"
diff -u -r a/poppler/GlobalParams.cc b/poppler/GlobalParams.cc
--- a/poppler/GlobalParams.cc 2017-11-03 11:25:02.000000000 +0100
+++ b/poppler/GlobalParams.cc 2017-11-11 01:15:30.793525300 +0100
@@ -60,6 +60,7 @@
# include <shlobj.h>
# include <mbstring.h>
#endif
+#include "goo/glibc.h"
#include "goo/gmem.h"
#include "goo/GooString.h"
#include "goo/GooList.h"
diff -u -r a/poppler/PDFDoc.cc b/poppler/PDFDoc.cc
--- a/poppler/PDFDoc.cc 2017-11-03 11:25:02.000000000 +0100
+++ b/poppler/PDFDoc.cc 2017-11-11 01:15:56.077971500 +0100
@@ -57,6 +57,7 @@
#include <string.h>
#include <time.h>
#include <sys/stat.h>
+#include "goo/glibc.h"
#include "goo/gstrtod.h"
#include "goo/GooString.h"
#include "goo/gfile.h"
diff -u -r a/poppler/UnicodeMap.cc b/poppler/UnicodeMap.cc
--- a/poppler/UnicodeMap.cc 2017-11-03 11:25:02.000000000 +0100
+++ b/poppler/UnicodeMap.cc 2017-11-11 01:16:25.738668000 +0100
@@ -30,6 +30,7 @@
#include <stdio.h>
#include <string.h>
+#include "goo/glibc.h"
#include "goo/gmem.h"
#include "goo/gfile.h"
#include "goo/GooString.h"
_______________________________________________
poppler mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/poppler