【问题标题】:Undefined references in GSLGSL 中未定义的引用
【发布时间】:2015-10-14 12:49:54
【问题描述】:

我正在尝试在一个小型 c 程序中链接 gsl。

#include "stdlib.h"
#include "stdio.h"
#include "gsl/gsl_block_float.h"
#include "gsl/gsl_matrix_float.h"

int main(void)
{
  gsl_matrix_float* m = gsl_matrix_float_alloc(2, 2);
  gsl_matrix_float_fprintf(stdout, m, "%f");
}

我正在使用gcc -lgsl -lgslcblas -lm program.c 进行编译。我也试过gcc $(pkg-config --cflags gsl) $(pkg-config --libs gsl) program.c,还有gsl-config。在任何情况下,gcc 都会返回

/tmp/cc1wKgXm.o: In function `main':
program.c:(.text+0x13): undefined reference to `gsl_matrix_float_alloc'
program.c:(.text+0x32): undefined reference to `gsl_matrix_float_fprintf'
collect2: error: ld returned 1 exit status

objdump --syms /usr/lib/libgsl.so | grep gsl_matrix_float 返回正确的符号,就像 grepping 我的标题一样。一切都在/usr/lib/usr/include 我做错了什么?

【问题讨论】:

  • 尝试更改链接顺序。 gcc -lgslcblas -lm -lgsl program.c
  • @CholNhial:如果有的话,program.c 必须首先出现,因为它没有定义库需要的任何符号。
  • 谢谢@EOF - 我很愚蠢。
  • @SM8:这是一个非常容易犯的错误,而且非常难以发现。此外,why 顺序甚至很重要,这有点深奥。不要为此自责。
  • 找到了一个能真正解释问题的答案:stackoverflow.com/a/409470/3185968

标签: c gcc undefined-reference gsl


【解决方案1】:

我从 ubuntu 论坛得到这个。 gcc 的参数顺序可能是问题

gcc -o program program.c `gsl-config --cflags --libs`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-13
    • 2015-12-16
    • 2021-09-01
    • 2021-07-24
    • 1970-01-01
    • 2012-06-29
    • 2011-07-14
    相关资源
    最近更新 更多