代码之家  ›  专栏  ›  技术社区  ›  zambro

尝试在Linux上的C/C++中使用lp_solve时出现“未定义引用”

  •  2
  • zambro  · 技术社区  · 12 年前

    我是线性编程和C的新手。我正在尝试使用 lp_solve 库来求解线性方程。问题是我不能 the demo code 工作。

    如中所述 the documentation ,我下载了 lp_solve_5.5_dev.gz 到我的Linux机器。我将这些文件提取到与代码相同的文件夹中,并尝试编译:

    ~/Desktop/Code/CA$ cc -o demo demo.c
    /tmp/ccpeN8ZV.o: In function `demo':
    demo.c:(.text+0x31): undefined reference to `make_lp'
    demo.c:(.text+0x62): undefined reference to `set_col_name'
    demo.c:(.text+0x7d): undefined reference to `set_col_name'
    demo.c:(.text+0xcf): undefined reference to `set_add_rowmode'
    demo.c:(.text+0x150): undefined reference to `add_constraintex'
    demo.c:(.text+0x1e6): undefined reference to `add_constraintex'
    demo.c:(.text+0x274): undefined reference to `add_constraintex'
    demo.c:(.text+0x29c): undefined reference to `set_add_rowmode'
    demo.c:(.text+0x30b): undefined reference to `set_obj_fnex'
    demo.c:(.text+0x327): undefined reference to `set_maxim'
    demo.c:(.text+0x33b): undefined reference to `write_LP'
    demo.c:(.text+0x34e): undefined reference to `set_verbose'
    demo.c:(.text+0x359): undefined reference to `solve'
    demo.c:(.text+0x383): undefined reference to `get_objective'
    demo.c:(.text+0x3a6): undefined reference to `get_variables'
    demo.c:(.text+0x3d2): undefined reference to `get_col_name'
    demo.c:(.text+0x429): undefined reference to `delete_lp'
    collect2: ld returned 1 exit status
    

    当我添加时 liblpsolve55.a 到命令,我得到以下错误:

    ~/Desktop/Code/CA$ cc -o demo demo.c liblpsolve55.a
    liblpsolve55.a(lp_lib.o): In function `scaled_floor':
    lp_lib.c:(.text+0x6923): undefined reference to `floor'
    liblpsolve55.a(lp_lib.o): In function `scaled_ceil':
    lp_lib.c:(.text+0x6f03): undefined reference to `ceil'
    liblpsolve55.a(lp_lib.o): In function `set_XLI':
    lp_lib.c:(.text+0x7aa2): undefined reference to `dlclose'
    lp_lib.c:(.text+0x7bb3): undefined reference to `dlopen'
    lp_lib.c:(.text+0x7bd1): undefined reference to `dlsym'
    lp_lib.c:(.text+0x7d8a): undefined reference to `dlsym'
    lp_lib.c:(.text+0x7da6): undefined reference to `dlsym'
    lp_lib.c:(.text+0x7dc2): undefined reference to `dlsym'
    liblpsolve55.a(lp_lib.o): In function `set_BFP':
    lp_lib.c:(.text+0x7eb4): undefined reference to `dlclose'
    lp_lib.c:(.text+0x7fc3): undefined reference to `dlopen'
    lp_lib.c:(.text+0x7fe1): undefined reference to `dlsym'
    lp_lib.c:(.text+0x831a): undefined reference to `dlsym'
    lp_lib.c:(.text+0x8336): undefined reference to `dlsym'
    lp_lib.c:(.text+0x8352): undefined reference to `dlsym'
    lp_lib.c:(.text+0x836e): undefined reference to `dlsym'
    liblpsolve55.a(lp_lib.o):lp_lib.c:(.text+0x838a): more undefined references to `dlsym' follow
    ................
    

    我知道 lp_解析 库没有加载到我的代码中。你能告诉我如何将 lp_解析 图书馆?

    1 回复  |  直到 9 年前
        1
  •  1
  •   Community Mohan Dere    9 年前

    您只是缺少一些编译器标志来包含正确的库。正如danielko所说,在谷歌上快速搜索失踪的图书馆会带来一些建议。例如。

    Linux c++ error: undefined reference to 'dlopen'

    http://sourceforge.net/p/dev-cpp/discussion/48211/thread/3bd8b8a1

    这些建议您的汇编应该更像:

    cc -o demo demo.c -ldl -llpsolve55
    

    以及 lpsolve documentation 建议使用包含项目目录的命令,例如:

    cc -I/lp_solve_5.5 -I/lp_solve_5.5/bfp -I/lp_solve_5.5/bfp/bfp_etaPFI -I/lp_solve_5.5/colamd $src -o MyExe.exe -lm -ldl