Gcc 自动将对象文件放在库之后

Gcc 自动将对象文件放在库之后,gcc,makefile,g++,autotools,automake,Gcc,Makefile,G++,Autotools,Automake,src/Makefile.am: 这可以很好地构建对象文件,但在构建目标时,它会尝试运行 g++ -fopenmp -O3 -std=c++17 -g -I/home/software/miniconda3/include -I../external -g -O2 -L/home/software/miniconda3/lib -Wl,-rpath=/home/software/miniconda3/lib -fopenmp -lz -ligraph -pthread -o myproj m

src/Makefile.am:

这可以很好地构建对象文件,但在构建目标时,它会尝试运行

g++ -fopenmp -O3 -std=c++17 -g -I/home/software/miniconda3/include -I../external -g -O2 -L/home/software/miniconda3/lib -Wl,-rpath=/home/software/miniconda3/lib -fopenmp -lz -ligraph -pthread   -o myproj myproj-gfa.o myproj-graph.o myproj-komb.o 
问题是,对象文件位于库文件之后,这会导致错误

/home/software/miniconda3/lib/libz.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

我可以通过在最末端添加-lz-ligraph标志轻松解决这个问题,但是如何让automake在对象文件之后添加LDFLAGS,而不是之前?

这是因为您使用了错误的变量。要传递库,应该使用myproj_LDADD,而不是myproj_LDFLAGS

/home/software/miniconda3/lib/libz.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status