所以基本上我想知道为什么我的可执行文件将libpthread作为共享库,而我的代码没有使用任何线程函数。它不包含在makefile中。是因为GCC默认编译为“--enable-threads = posix”?
如果有,有办法从我的可执行文件中删除它吗?如果不是什么问题?
LDD
linux-vdso.so.1 => (0x0000656150c5a000)
librt.so.1 => /lib64/librt.so.1 (0x0000656150a4c000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000656150746000)
libm.so.6 => /lib64/libm.so.6 (0x00006561504c1000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00006561502ab000)
libc.so.6 => /lib64/libc.so.6 (0x000065614ff17000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x000065614fcf9000)
/lib64/ld-linux-x86-64.so.2 (0x0000656150c5b000)
生成文件
CC = gcc
OFLAGS = -O3
C++ = g++ -g
LFLAGS = -lrt
# API Exclusions
DFLAGS = -DNO_ZLIB -DNO_LOCALIZATION -DNO_INTERFACE
CFLAGS = $(OFLAGS) $(DFLAGS) -I. -I../rgapi/include/core/ -I../rgapi/include/public/
OBJS = ( ... list of .o files ... )
PROGS = ./rgs
all: $(OBJS) $(PROGS)
./rgs: $(OBJS)
$(C++) -o ./rgs $(OBJS) $(LFLAGS)
clean:
rm -f $(OBJS) $(PROGS)
$(OBJS): %.o: %.cpp
$(C++) -o $@ $(CFLAGS) -c $<
./rgs: $(OBJS)
答案 0 :(得分:4)
您正在与librt.so
:
LFLAGS = -lrt
这是间接依赖。
$ ldd /usr/lib64/librt.so
linux-vdso.so.1 (0x00007ffcc33d2000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f2480a0b000)
libc.so.6 => /lib64/libc.so.6 (0x00007f2480649000)
/lib64/ld-linux-x86-64.so.2 (0x0000562f4cffb000)
librt.so
与-lpthread
相关联。如果您链接到任何共享库,则会继承共享库链接的所有行李。
您无法将其从可执行文件中删除&#34;。唯一的方法是不与-lrt
链接。