c - 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
解决方案
推荐阅读
- oracle - Oracle Apex,如何在选中复选框的 Oracle Apex 交互式报告中获取数据
- azure - 将 Microsoft(个人和工作 Azure AD)OIDC 集成到 AWS Cognito
- android - IONIC:使用文件插件将文件从内部存储复制到应用程序目录后文件大小增加
- postgresql - 如何从 PostgreSQL 中的两个函数创建一个函数?
- r - 如何通过着色节点来绘制网络图
- apache-kafka - 在Kafka Connect中,如何连接多个kafka集群?
- django - Django PhoneNumberField 库在使用引导类时出现问题
- c++ - Fstream getline() 仅从文本文件的第一行读取,忽略每隔一行
- vaadin - 将 Vaadin 14.0.10 应用程序更新到 14.5.4 会导致从 /VAADIN/ 加载的资源出现 MIME 类型错误
- unity3d - 在统一通用 RP 项目中找不到 2D 选项