https://github.com/eantoranz/gitmod
它被分成单独的c/h文件。在我当前的Makefile中,我将每个c文件编译成它们自己的.o文件,然后当我想创建最终程序时,我要求编译一个c文件,它有一个main并提供所有其他的.o文件。到目前为止,还不错(如果这个方法不正确,请告诉我)。
下一步,我想将程序的主要部分与所有其他部分的代码分开,并希望将所有以前的o文件打包到一个单独的so文件中(到目前为止,该文件只是作为另一个.o文件编译的)。
所以,以前的方法是这样的:
gitmod.o: src/gitmod.c include/gitmod.h lock.o root_tree.o thread.o object.o cache.o
$(CC) -c -o $@ $< $(CFLAGS)
gitmod: src/main.c gitmod.o
$(CC) $< *.o -o $@ $(CFLAGS)
这将是使用so替换的此过程的最后2个步骤
gitmod.o
对于
libgitmod.so
,在创建所有以前的.o文件之后:
libgitmod.so: src/gitmod.c include/gitmod.h lock.o root_tree.o thread.o object.o cache.o
$(CC) $< *.o -shared -o $@ $(CFLAGS)
gitmod: src/main.c libgitmod.so
$(CC) $< -llibgitmod.so -o $@ $(CFLAGS)
libgitmod.so
将是共享库,我想实际包含所有其他部分的代码(我真的希望这是可能的)。
make
正在经历
libgitmod.so
gcc src/gitmod.c *.o -shared -o libgitmod.so -Iinclude `pkg-config fuse3 libgit2 glib-2.0 --cflags --libs` -DGITMOD_DEBUG -Wall -g
/usr/bin/ld: object.o: warning: relocation against `stderr@@GLIBC_2.2.5' in read-only section `.text'
/usr/bin/ld: /tmp/ccir4Ou9.o: relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
make: *** [Makefile:32: libgitmod.so] Error 1
我做错什么了?