Ivan Medoedov via llvm-dev
2019-Jun-07 20:44 UTC
[llvm-dev] ld.lld fails with "undefined symbol: _fopen" on macOS, while working as expected on Linux
Thanks, Tim. You are right, it's using macOS' stdio.h, which is a terrible idea. Clang docs on --sysroot: When you have extracted your cross-compiler from a zip file into a directory, you have to use --sysroot=<path>. The path is the root directory where you have unpacked your file, and Clang will look for the directories bin, lib, include in there. I have a silly question: where can I download the mentioned zip file with all bin, lib, and include files for x64 Linux target? So far I've been copying files one by one (/lib64/ld-linux-x86-64.so.2 /usr/lib/x86_64-linux-gnu/crt1.o /usr/lib/x86_64-linux-gnu/crti.o, etc) and it's been a painful process. On Fri, Jun 7, 2019 at 9:34 PM Tim Northover <t.p.northover at gmail.com> wrote:> Hi Ivan, > > On Fri, 7 Jun 2019 at 11:19, Ivan Medoedov via llvm-dev > <llvm-dev at lists.llvm.org> wrote: > > LLD 8.0.0 (compatible with GNU linkers) > > ld.lld: error: undefined symbol: _fopen > > >>> referenced by fopen.c > > >>> test.o:(main) > > I suspect you're getting the macOS version of stdio.h, which makes > fopen some kind of alias. You really should use a sysroot when > cross-compiling, though you *might* get away with just > -I/path/to/linux/usr/include. Just what you've copied across might > well be sufficient to use with --sysroot. > > Cheers. > > Tim. >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190607/902259a6/attachment.html>
Tim Northover via llvm-dev
2019-Jun-07 21:07 UTC
[llvm-dev] ld.lld fails with "undefined symbol: _fopen" on macOS, while working as expected on Linux
On Fri, 7 Jun 2019 at 13:44, Ivan Medoedov <ivan.medoedov at gmail.com> wrote:> I have a silly question: where can I download the mentioned zip file with all bin, lib, and include files for x64 Linux target?There's no official source really. Systems can vary so much that it's probably best to take it from the system you're cross-compiling for.> So far I've been copying files one by one (/lib64/ld-linux-x86-64.so.2 /usr/lib/x86_64-linux-gnu/crt1.o /usr/lib/x86_64-linux-gnu/crti.o, etc) and it's been a painful process.I'd probably tar up all of /usr/lib, /usr/include, and /lib rather than copying them one at a time. For many use-cases that would be enough, but if you've got a build-system that uses pkg-config or something things rapidly get harder. Cheers. Tim.
Ivan Medoedov via llvm-dev
2019-Jun-07 21:28 UTC
[llvm-dev] ld.lld fails with "undefined symbol: _fopen" on macOS, while working as expected on Linux
I managed to make it work by just copying everything from /usr/include, /usr/lib/, and /lib. It works surprisingly well. Thanks a lot, Tim! On Fri, Jun 7, 2019 at 11:07 PM Tim Northover <t.p.northover at gmail.com> wrote:> On Fri, 7 Jun 2019 at 13:44, Ivan Medoedov <ivan.medoedov at gmail.com> > wrote: > > I have a silly question: where can I download the mentioned zip file > with all bin, lib, and include files for x64 Linux target? > > There's no official source really. Systems can vary so much that it's > probably best to take it from the system you're cross-compiling for. > > > So far I've been copying files one by one (/lib64/ld-linux-x86-64.so.2 > /usr/lib/x86_64-linux-gnu/crt1.o /usr/lib/x86_64-linux-gnu/crti.o, etc) and > it's been a painful process. > > I'd probably tar up all of /usr/lib, /usr/include, and /lib rather > than copying them one at a time. For many use-cases that would be > enough, but if you've got a build-system that uses pkg-config or > something things rapidly get harder. > > Cheers. > > Tim. >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190607/5fcc6838/attachment.html>