I've being messing around with the Ghostscript C API and built a simple command line tool to convert PDFs from RGB to CMYK. It works a charm on my Ubuntu 20.04. So I went ahead and gave this tool a shot as an AWS Lambda C++. It runs without any output error (even with -dDEBUG), however, the resulting PDF is not valid.
Inspecting it on a text editor, just to comparer its content vs one that I converted on my Ubuntu 20.04 (using the same RGB file as input, of course), it seems incomplete, like, trucated.
The parameters passed to gs, as per what can be seen on those PDFs headers, are as follows:
gpdfc -dSAFER -dBATCH -dNOPAUSE -dNOCACHE -sDEVICE=pdfwrite -sColorConversionStrategy=CMYK -dProcessColorModel=/DeviceCMYK -sOutputFile=? -q
I did multiple runs and got the exact same result. Again, it works fine on my machine.
As per the lambda itself, I'm shipping it with a vendor libgpdf.so.10 (and all its dependencies -- AWS Lambda C++ Runtime does it by design), which I got from ghostpdl/sobin/ directory, after have build GS 9.5 from Github source code on my Ubuntu 20.04 box.
$ lddtree LambdaConverterPDF
The complete output:
LambdaConverterPDF => ./LambdaConverterPDF (interpreter => /lib64/ld-linux-x86-64.so.2)
libaws-cpp-sdk-s3.so => /usr/local/lib/libaws-cpp-sdk-s3.so
ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2
libaws-cpp-sdk-core.so => /usr/local/lib/libaws-cpp-sdk-core.so
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0
libcrypto.so.1.1 => /lib/x86_64-linux-gnu/libcrypto.so.1.1
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6
libgpdf.so.10 => /home/leandro/code/lambda-converter-pdf/lib/ghostscript/libgpdf.so.10
libXt.so.6 => /lib/x86_64-linux-gnu/libXt.so.6
libSM.so.6 => /lib/x86_64-linux-gnu/libSM.so.6
libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1
libICE.so.6 => /lib/x86_64-linux-gnu/libICE.so.6
libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0
libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6
libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1
libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6
libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
libcurl.so.4 => /lib/x86_64-linux-gnu/libcurl.so.4
libnghttp2.so.14 => /lib/x86_64-linux-gnu/libnghttp2.so.14
libidn2.so.0 => /lib/x86_64-linux-gnu/libidn2.so.0
libunistring.so.2 => /lib/x86_64-linux-gnu/libunistring.so.2
librtmp.so.1 => /lib/x86_64-linux-gnu/librtmp.so.1
libgnutls.so.30 => /lib/x86_64-linux-gnu/libgnutls.so.30
libp11-kit.so.0 => /lib/x86_64-linux-gnu/libp11-kit.so.0
libffi.so.7 => /lib/x86_64-linux-gnu/libffi.so.7
libtasn1.so.6 => /lib/x86_64-linux-gnu/libtasn1.so.6
libhogweed.so.5 => /lib/x86_64-linux-gnu/libhogweed.so.5
libnettle.so.7 => /lib/x86_64-linux-gnu/libnettle.so.7
libgmp.so.10 => /lib/x86_64-linux-gnu/libgmp.so.10
libssh.so.4 => /lib/x86_64-linux-gnu/libssh.so.4
libpsl.so.5 => /lib/x86_64-linux-gnu/libpsl.so.5
libssl.so.1.1 => /lib/x86_64-linux-gnu/libssl.so.1.1
libgssapi_krb5.so.2 => /lib/x86_64-linux-gnu/libgssapi_krb5.so.2
libkrb5.so.3 => /lib/x86_64-linux-gnu/libkrb5.so.3
libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1
libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2
libk5crypto.so.3 => /lib/x86_64-linux-gnu/libk5crypto.so.3
libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2
libkrb5support.so.0 => /lib/x86_64-linux-gnu/libkrb5support.so.0
libldap_r-2.4.so.2 => /lib/x86_64-linux-gnu/libldap_r-2.4.so.2
libsasl2.so.2 => /lib/x86_64-linux-gnu/libsasl2.so.2
libgssapi.so.3 => /lib/x86_64-linux-gnu/libgssapi.so.3
libheimntlm.so.0 => /lib/x86_64-linux-gnu/libheimntlm.so.0
libwind.so.0 => /lib/x86_64-linux-gnu/libwind.so.0
libkrb5.so.26 => /lib/x86_64-linux-gnu/libkrb5.so.26
libheimbase.so.1 => /lib/x86_64-linux-gnu/libheimbase.so.1
libhx509.so.5 => /lib/x86_64-linux-gnu/libhx509.so.5
libsqlite3.so.0 => /lib/x86_64-linux-gnu/libsqlite3.so.0
libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1
libasn1.so.8 => /lib/x86_64-linux-gnu/libasn1.so.8
libhcrypto.so.4 => /lib/x86_64-linux-gnu/libhcrypto.so.4
libroken.so.18 => /lib/x86_64-linux-gnu/libroken.so.18
liblber-2.4.so.2 => /lib/x86_64-linux-gnu/liblber-2.4.so.2
libbrotlidec.so.1 => /lib/x86_64-linux-gnu/libbrotlidec.so.1
libbrotlicommon.so.1 => /lib/x86_64-linux-gnu/libbrotlicommon.so.1
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1
I've run out of ideas. Any help is more than welcome.
Cheers!
UPDATE:
As per what Marco says, I could use whatever Linux distro to dev/build my code and then ship it to lambda. That kind of put aside my suspect about binary compatibility or something like that.


