我试图将由用户编写的C文件编译的目标文件“ blas.o”与某些第三方库链接。
它以这种方式工作
$ gcc blas.o -lgsl -lgslcblas -lm
但不是这样
$ gcc -lgsl -lgslcblas -lm blas.o
blas.o: In function `main':
blas.c:(.text+0xf9): undefined reference to `gsl_matrix_view_array'
blas.c:(.text+0x116): undefined reference to `gsl_matrix_view_array'
blas.c:(.text+0x136): undefined reference to `gsl_matrix_view_array'
blas.c:(.text+0x16f): undefined reference to `gsl_blas_dgemm'
collect2: error: ld returned 1 exit status
上面,blas.o取决于链接的库,但不是相反的。我是否可以得出结论,链接器实际上是从命令行从右到左使用符号?我的gcc和ld版本如下:
$gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
Copyright info...
$ ld --version
GNU ld (GNU Binutils for Ubuntu) 2.26.1
Copyright info...
我知道链接库和对象的顺序对于某些链接器可能很重要。但是,总的来说,是否存在安全(或称为通用)命令来在GCC命令行中链接库?例如,是否存在所有链接程序都遵守的标准?