path issue after compiling curl
我使用以下命令克隆了repo后编译curl:
1 2 3 4
| ./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工作,这似乎不对。 这就是我现在要弄清楚的部分。
-
编译curl后可执行的可执行文件是否可执行?
-
由于你所指的帖子是关于在哪里找到curl可执行文件,我认为这需要一个单独的帖子。这个是关于我在安装后得到的错误。
-
在我的赏金帖子中,我应该说我做的配置命令:./ configure --with-libssh2。我还要提一下,我安装libssh2的方式是使用sudo apt-get install libssh2-1-dev。
-
运行ldd $(which curl),你得到了什么?
-
当我运行该命令时,我得到:不是动态可执行文件
-
实际上,当我运行时,哪个卷曲指向我路径中的那个(curl / src)。现在我已经从我的路径中删除了它,ldd $(curl)返回:linux-vdso.so.1 =>(0x00007fffd51ef000)libcurl.so.4 => /usr/local/lib/libcurl.so.4 (0x00007ff996851000)libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1(0x00007ff996634000)libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0(0x00007ff996415000 )libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6(0x00007ff996035000)libssh2.so.1 => /usr/lib/x86_64-linux-gnu/libssh2.so.1(0x00007ff995e09000 )[修剪以适应这个coment]
-
@Erich运行type curl,which curl和file $(which curl),你得到了什么
-
您应该使用command -v curl,而不是which。另请参阅如何从Bash脚本检查程序是否存在?以及如何检查shell脚本中是否存在命令?
-
除./configure --with-libssh2之外,您应该将-L/usr/local/lib -Wl,-R,/usr/local/lib -Wl,--enable-new-dtags添加到LDFLAGS以避免过去二十年来困扰Linux的路径问题。
安装路径
如果不使用configure的--prefix选项,则默认安装将在/usr/local中进行,因此curl最终会在/usr/local/bin/curl处结束。
符号查找错误
它报告缺少的符号是libcurl的最新添加,它表示您正在调用一个新的curl工具来加载和使用较旧的libcurl - 即不是刚刚安装的那个,而是之前的(系统?)安装的一个。
您可以通过调用来验证卷曲加载哪个libcurl
1
| $ 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时,通常最好将其安装在单独的路径中,以便它可以与已安装在系统中的路径共存。
-
非常感谢Daniel的详细解答。 当我运行你提到的命令(ldd / usr / local / bin / curl | grep libcurl)时,我得到:libcurl.so.4 => /usr/lib/x86_64-linux-gnu/libcurl.so.4。 所以,如果我选择选项2,我猜我会在/etc/ld.so.conf中添加"/ usr / lib / x86_64-linux-gnu"。 有了这个,我应该能够安装php-curl,因为我通常会使用apt-get install php-curl和apache将能够使用它吗? 此外,是否有一些我做错的安装导致了这种行为? 我应该首先卸载libcurl吗?
-
令人遗憾的是,Linux在25年左右之后仍然没有修复破碎的路径问题。
-
这不是一个错误,这是一个功能。 这对于修复"Linux"来说并不是一个"路径问题"。
-
谢谢你的信息,丹尼尔。 这有效! 享受我脆弱的声誉!