首页 > 解决方案 > LLVM Clang 下划线链接问题

问题描述

我知道关于这个主题有几个相关的帖子,但是在一天中的大部分时间都经过了它之后,我发布了这个问题。

我正在用 clang构建和编译一个 C ELF 应用程序(不是 C++) 。一切都编译得很好,但是链接失败,大量以下划线开头的未定义符号。这些符号都在 /lib/libc-2.27.so 的 glibc 中定义,没有下划线,但 LLVM 一直将下划线放在我的目标文件中。我强烈怀疑我应该链接到不同的 libc,但是,出色的文档让我不知道这不起作用。

libtool: link: clang -I../include -I../libstuff -g -O2 -I/usr/lib64/llvm/6/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -target x86_64-pc-linux-gnu -std=c99 -stdlib=libc -I/usr/include -isystem/mnt/apple-sdk/4.6/4.6.2/SDKs/MacOSX10.7.sdk/usr/include --no-system-header-prefix=/usr/include --no-system-header-prefix=/mnt/apple-sdk/4.6/4.6.2/SDKs/MacOSX10.7.sdk/usr/include -o ar ar-append.o ar-ar.o ar-archive.o ar-contents.o ar-delete.o ar-extract.o ar-misc.o ar-move.o ar-print.o ar-replace.o -L/usr/lib64/llvm/6/lib64 ../libstuff/.libs/libstuff.a -lLLVMSymbolize -lLLVMDemangle -lLLVMSupport -lLLVMMC -lc ar-append.o: In function `append': /home/kwhat/NetBeansProjects/binutils-apple_new/ar/append.c:103: undefined reference to `_open' /home/kwhat/NetBeansProjects/binutils-apple_new/ar/append.c:113: undefined reference to `_close'

更新和解决方案

在阅读了-I、-isystem 的GCC 文档并调整了我的 CFLAGS 中的包含顺序之后,我能够解决这个问题。问题最终是 OS X 包含文件夹中的一个文件需要在 /usr/include 之前,其余的在之后。检查 Plo 文件提供了有用的洞察力,可以了解包含来自何处以及哪些是意外的。如果有人想知道我到底在做什么,我正在将用于 Linux 的 cctools 和 ld64 的旧端口重构为 OS X 交叉编译。该项目目前有效,但包括许多我试图解决的标题黑客和不需要的修补程序。更多信息:https ://github.com/kwhat/binutils-apple

标签: clinkerclangllvm

解决方案


推荐阅读