对于一个程序,我正在链接静态 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 中的 *.a 文件替换为 *.so 文件就足够了吗?如果不是这样做的正确方法是什么。我试图简单地用 makefile 中的 *.so 文件替换 *.a,但当我这样做时,程序似乎使用了原始的 glibc(而不是我修改过的)。
最佳答案
如果您不想使用标准库,您可能需要 -nostdlib
标志。另外,如果你想动态链接库,你需要告诉链接器它们在哪里。 -L/dir/containing -lc
.
如果你不想在执行时设置LD_LIBRARY_PATH
,你需要设置rpath
,-Wl,--rpath=/path/包含
。
关于c - 如何在 makefile 中包含 *.so 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10689040/