【问题标题】:Compiling a shared object folder without libc编译没有 libc 的共享对象文件夹
【发布时间】:2018-04-04 07:58:14
【问题描述】:

是否可以在不使用 libc 的情况下在 Linux 上构建共享对象文件?我尝试使用 -nostdlib 构建共享对象,它抱怨内置函数“memset”的类型存在冲突(我在尝试构建的共享对象中定义了我自己的函数版本)。

我没有使用共享对象文件中的任何 libc 函数。我正在按如下方式构建共享对象:-

CC      = gcc
CFLAGS  = -Wall -Wextra -Werror -nostdlib
OUTPUTDIR = ./build
test: outputdir
    $(CC) $(CFLAGS) -c -fPIC test.c -o ${OUTPUTDIR}/test.o
    $(CC) $(CFLAGS) ${OUTPUTDIR}/test.o -shared -o ${OUTPUTDIR}/libtest.so

outputdir:
    mkdir -p ${OUTPUTDIR}

clean:
    rm -rf ${OUTPUTDIR}

【问题讨论】:

    标签: linux gcc shared-libraries libc shared-objects


    【解决方案1】:

    如果您使用-nostdlib 链接,您还应该使用-ffreestanding 和/或-fno-builtin 进行编译。

    您还必须注意不要在没有链接到 glibc 的情况下引用 libc.so.6 符号。事情可能表面上看起来有效,但它往往会在某些环境中引入损坏,尤其是在将额外的 IFUNC 添加到 glibc 之后。 (Intel did that with the ICC 16 compiler library.)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-07
      • 2013-04-16
      • 1970-01-01
      • 2016-05-22
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多