首页 文章

编译curl后的路径问题

提问于
浏览
0

我使用以下命令克隆了repo后编译curl:

./buildconf
./configure --with-libssh2
make
sudo make install

但是,在sudo make install之后,如果

  • 我跑 curl -V ,我得到:bash: /usr/bin/curl: No such file or directory .

  • 我跑 /usr/local/bin/curl -V ,我得到: /usr/local/bin/curl: symbol lookup error: /usr/local/bin/curl: undefined symbol: curl_mime_type .

我尝试通过将curl / src的路径添加到我的PATH变量来解决这个问题,并使curl命令从终端为我的用户工作 . 但是,如果我尝试安装 php-curl ,可以理解的是,apache看不到curl并安装了另一个 .

关于如何解决这个问题的任何想法?

编辑:评论中提到的另一篇文章是在编译后询问在哪里找到可执行文件 . 那部分得到了解答 . 但是如果没有在我的PATH变量中添加一个条目,我仍然无法使curl工作,这似乎不对 . 这就是我现在要弄清楚的部分 .

1 回答

  • 3

    安装路径

    如果您没有't use configure'选项,则默认安装将在 /usr/local 中进行,因此curl最终会在 /usr/local/bin/curl 处结束 .

    符号查找错误

    它报告缺少的符号是libcurl的最新成员,它表示您正在调用一个新的curl工具来加载和使用较旧的libcurl - 即不是刚安装的那个,而是之前的(系统?)安装的一个 .

    您可以通过调用来验证卷曲加载哪个libcurl

    $ ldd /usr/local/bin/curl | grep libcurl
    

    您可以通过多种方式之一更改curl加载的libcurl,这两种方式都不是特定于curl的,所以我只是简单地提一下这里的方法,以便在别处进一步解释:

    • 在调用curl之前,只需在shell中设置 LD_LIBRARY_PATH

    • 编辑 /etc/ld.so.conf 并确保搜索路径的顺序使旧的libcurl在旧的libcurl之前找到 .

    • 通过使用 LDFLAGS=-Wl,-R/usr/local/ssl/lib ./configure ... 之类的内容调用configure,将curl可执行文件与硬编码路径链接到新的libcurl

    更换系统库?

    通常不建议用自定义构建替换已安装的系统libcurl . 主要是因为您可能有一个或两个应用程序依赖于该构建的细节 . 当您从源代码安装自己的libcurl时,通常最好将其安装在单独的路径中,以便它可以与已安装在系统中的路径共存 .

相关问题