Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在makefile中包含*.so文件_C_Linux_Gcc_X86 64_Glibc - Fatal编程技术网

C 如何在makefile中包含*.so文件

C 如何在makefile中包含*.so文件,c,linux,gcc,x86-64,glibc,C,Linux,Gcc,X86 64,Glibc,对于一个程序,我链接了静态glibc库(我修改了它)。我的makefile看起来像这样 CXX = g++ CXXFILES = main.c CXXFLAGS = -g -o prog -D_GNU_SOURCE LIBS = ../../nptl/libpthread.a ../../libc.a -lpthread all: $(CXX) $(CXXFILES) $(LIBS) $(CXXFLAGS) 但是,我现在希望使用动态共享对象*.so文件,而不是使用静态的*.a文件。

对于一个程序,我链接了静态glibc库(我修改了它)。我的makefile看起来像这样

CXX = g++
CXXFILES = main.c

CXXFLAGS = -g -o prog -D_GNU_SOURCE
LIBS = ../../nptl/libpthread.a ../../libc.a -lpthread

all:
    $(CXX) $(CXXFILES) $(LIBS) $(CXXFLAGS)

但是,我现在希望使用动态共享对象*.so文件,而不是使用静态的*.a文件。用makefile中的*.so文件替换*.a文件是否足够。如果不是,正确的方法是什么。我试图简单地用makefile中的*.so文件替换*.a,但当我这样做时,程序似乎使用了原始的glibc(而不是我修改的glibc)

如果不想使用标准库,可能需要
-nostlib
标志。此外,如果要动态链接库,需要告诉链接器它们在哪里<代码>-L/dir/包含-lc


如果执行时不想设置
LD\u库路径
,则需要设置
rpath
-Wl,--rpath=/PATH/containing

,难道不需要像正常编译一样,然后在运行之前设置
LD\u预加载
?不,我不想使用LD_预加载!看一看。它应该可以帮助您解决问题。@metallicprait:在这种情况下,您应该编辑您的问题,以便它详细说明您的所有约束条件。请阅读指出
--rpath
作用的要点。这就是为什么我下载的这么多项目在其构建中需要
LD\u LIBRARY\u PATH