【问题标题】:ld cannot find -l<library>ld 找不到 -l<库>
【发布时间】:2012-08-19 21:37:40
【问题描述】:

我在 ubuntu 12.04 上安装 pyipopt 时遇到问题。在链接期间,我收到错误:

/usr/bin/ld: 找不到 -lcoinhsl

尽管我知道该库已安装并且 .so 和 .la 文件在 /home/mostafa/MyBuilds/CoinIpopt/build/lib/ 中可用

有人对此有解决方案吗?

下面是运行 setup.py build 的完整返回:

root@ubuntu:~/MyBuilds/pyipopt# sudo python setup.py build 运行构建 运行 build_ext 构建“pyipopt”扩展 gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/lib/python2.7/dist-packages/numpy/core/include -I/home/ mostafa/MyBuilds/CoinIpopt/build/include/coin/ -I/usr/include/python2.7 -c src/callback.c -o build/temp.linux-x86_64-2.7/src/callback.o gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/lib/python2.7/dist-packages/numpy/core/include -I/home/ mostafa/MyBuilds/CoinIpopt/build/include/coin/ -I/usr/include/python2.7 -c src/pyipopt.c -o build/temp.linux-x86_64-2.7/src/pyipopt.o src/pyipopt.c:在函数“set_intermediate_callback”中: src/pyipopt.c:452:15:警告:变量“myowndata”设置但未使用 [-Wunused-but-set-variable] gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relrobuild/temp.linux-x86_64-2.7/src/callback.o build/temp.linux -x86_64-2.7/src/pyipopt.o -L/home/mostafa/MyBuilds/CoinIpopt/build/lib/ -lipopt -lblas -lcoinhsl -lcoinmetis -llapack -ldl -lm -o build/lib.linux-x86_64-2.7 /pyipopt.so -Wl,--rpath -Wl,/home/mostafa/MyBuilds/CoinIpopt/build/lib/ /usr/bin/ld: 找不到 -lcoinhsl collect2: ld 返回 1 个退出状态 错误:命令“gcc”失败,退出状态为 1

【问题讨论】:

    标签: gcc ubuntu linker shared-libraries ld


    【解决方案1】:

    -Ldir
    将目录dir添加到要搜索的目录列表中-l。

    【讨论】:

    • @Jivan 您应该设置库所在的文件夹/目录,这就是 -Ldir 的含义。如果coinhsl 所在的文件夹名为/home/mostafa/MyBuilds/CoinIpopt/build/lib/,则此开关应类似于-L/home/mostafa/MyBuilds/CoinIpopt/build/lib/。问题是,使用了这个开关,所以不是这样的。或者它需要设置另一个文件夹!无论如何,这个答案不适合这种问题。
    【解决方案2】:

    您可以在您的标准库目录之一中安装您的 coinhsl 库并在安装 ppyipopt 之前运行“ldconfig”

    【讨论】:

    • 能否请您告诉我应该如何安装它以及标准库目录在哪里?实际上coinhsl是IPopt(这是一个数学优化工具)安装和使用的库之一,所以我不知道如何单独安装它?
    【解决方案3】:

    我在另一个库中遇到了类似的问题,它没有找到它的原因是我没有为该库运行 make install(在运行 ./configure 和 make 之后)。 make install 可能需要 root 权限(在这种情况下使用:sudo make install)。运行 make install 后,您应该将 so 文件放在正确的文件夹中,即此处 /usr/local/lib 而不是您提到的文件夹中。

    【讨论】:

      【解决方案4】:

      您可以将 coinhsl 库的路径添加到 LD_LIBRARY_PATH 变量。可能会有帮助。

      export LD_LIBRARY_PATH=/xx/yy/zz:$LD_LIBRARY_PATH
      

      其中/xx/yy/zz 表示coinhsl 库的路径。

      【讨论】:

      • 实际上,LD_LIBRARY_PATH 不会影响在 link 时如何找到库的方式,而是在 run 时。
      猜你喜欢
      • 2015-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-18
      • 1970-01-01
      • 2015-11-03
      • 2015-08-16
      • 1970-01-01
      相关资源
      最近更新 更多