Open daviesian opened 10 years ago
Thanks for the issues you opened. Maybe we could fix this by applying a patch to kpathsea/libkpathsea_la-getopt.c before compiling it, so it doesn't export this symbol anymore?
That sounds like a sensible idea. I'd like to learn a bit more about emscripten's expectations of the code it compiles first, I'll look into it.
Thanks for an awesome project, by the way, I'm really looking forward to using it. I hope I can help out with a few issues along the way.
Just out of interest, which version of emscripten are you using? I couldn't find one old enough to actually work on this project as-is!
Great! I am using emscripten commit 1a007b1631509b9d72499a8f4402294017ee04dc
(incoming branch).
Ah, that is interesting. You don't see any of the issues I'm describing?
Works for me, what's the error message you see?
See issue #13 and #14 for the complete description of the errors I get.
Ok, I just updated emscripten to the latest version (v1.10.0 commit ef1e460...). Works fine with this version.
PS: my LLVM version is 3.2svn and clang v3.2 (32 bit)
I'm getting the same errors as @daviesian. I am using LLVM 3.3svn and emscripten 1.24.0 x86_64. @manuels can you confirm you don't get these errors..? It seems strange that we'd be getting them but you wouldn't. I see seven files with the main symbol, and pdftex.bc contains a main as well, regarding the following commands:
emcc -v -s FS_LOG=0 -s TOTAL_MEMORY=67108864 -O2 pdftex-1.40.11/build-pdftex/texk/web2c/lib/*.o pdftex-1.40.11/build-pdftex/texk/kpathsea/*.o pdftex.bc -s INVOKE_RUN=0 --pre-js pre.js --post-js post.js -o pdftex-worker.js llvm-nm pdftex-1.40.11/build-pdftex/texk/web2c/lib/*.o pdftex-1.40.11/build-pdftex/texk/kpathsea/*.o | grep main | wc -l
I note that emscripten somehow tries to remove duplicate symbols but this is not working. And the --remove-duplicates flag has been deprecated.
@daviesian's hacks worked for me.
The "right way" (TM) to fix the getopts problem is using CFLAGS=-DELIDE_CODE. Look at getopts.h: This will disable kpathsea's getopts and use the libc's one
Following on from issue #13, there is a second, similar, error.
Environment
As in issue #13.
Issue
After applying my suggested fix for #13, the compilation still only gets as far as llvm-linking in the
make pdftex-worker.js
task (Line 112 of Makefile) and then fails with the following error:Cause
Unlike issue #13, this error is in linking the emscripten
libc
library. Investigating withllvm-nm
reveals thatkpathsea/libkpathsea_la-getopt.o
exports this symbol.Workaround
It is hard to propose a 'fix' for this problem. We probably can't exclude the file as we did in #13, because it is genuinely part of the kpathsea library. Instead my personal workaround is to comment out line 1441 from
~/emscripten/emcc
and then force a rebuild of the cache oflibc.bc
by running:After applying this fix, along with my proposed solution to issue #13, texlive.js compiles successfully.
I'm not sure whether this should really be considered an issue with texlive.js or with emscripten - it's really just an incompatibility between the two.
Warning
Using more recent versions of
emscripten
than1.8.2
makes things even worse. See their commit on 17th Nov 2013.