• libtool: link: you must specify an output file


      今天白天安装apr,在make的时候报错:


    make[1]: 正在进入目录 `/home/***/apr-1.4.6'
    /bin/bash /home/***/apr-1.4.6/libtool --silent --mode=link  gcc -g -O2 -pthread   -DHAVE_CONFIG_H -D_REENTRANT -D_GNU_SOURCE -D_LARGEFILE64_SOURCE   -I./include -I/home/liuli/apr-1.4.6/include/arch/unix -I./include/arch/unix -I/home/liuli/apr-1.4.6/include/arch/unix -I/home/liuli/apr-1.4.6/include  -version-info     -o libapr-.la -rpath /usr/local/apr/lib passwd/apr_getpass.lo strings/apr_cpystrn.lo strings/apr_fnmatch.lo strings/apr_snprintf.lo strings/apr_strings.lo strings/apr_strnatcmp.lo strings/apr_strtok.lo tables/apr_hash.lo tables/apr_tables.lo atomic/unix/builtins.lo atomic/unix/ia32.lo atomic/unix/mutex.lo atomic/unix/ppc.lo atomic/unix/s390.lo atomic/unix/solaris.lo dso/unix/dso.lo file_io/unix/buffer.lo file_io/unix/copy.lo file_io/unix/dir.lo file_io/unix/fileacc.lo file_io/unix/filedup.lo file_io/unix/filepath.lo file_io/unix/filepath_util.lo file_io/unix/filestat.lo file_io/unix/flock.lo file_io/unix/fullrw.lo file_io/unix/mktemp.lo file_io/unix/open.lo file_io/unix/pipe.lo file_io/unix/readwrite.lo file_io/unix/seek.lo file_io/unix/tempdir.lo locks/unix/global_mutex.lo locks/unix/proc_mutex.lo locks/unix/thread_cond.lo locks/unix/thread_mutex.lo locks/unix/thread_rwlock.lo memory/unix/apr_pools.lo misc/unix/charset.lo misc/unix/env.lo misc/unix/errorcodes.lo misc/unix/getopt.lo misc/unix/otherchild.lo misc/unix/rand.lo misc/unix/start.lo misc/unix/version.lo mmap/unix/common.lo mmap/unix/mmap.lo network_io/unix/inet_ntop.lo network_io/unix/inet_pton.lo network_io/unix/multicast.lo network_io/unix/sendrecv.lo network_io/unix/sockaddr.lo network_io/unix/socket_util.lo network_io/unix/sockets.lo network_io/unix/sockopt.lo poll/unix/epoll.lo poll/unix/kqueue.lo poll/unix/poll.lo poll/unix/pollcb.lo poll/unix/pollset.lo poll/unix/port.lo poll/unix/select.lo random/unix/apr_random.lo random/unix/sha2.lo random/unix/sha2_glue.lo shmem/unix/shm.lo support/unix/waitio.lo threadproc/unix/proc.lo threadproc/unix/procsup.lo threadproc/unix/signals.lo threadproc/unix/thread.lo threadproc/unix/threadpriv.lo time/unix/time.lo time/unix/timestr.lo user/unix/groupinfo.lo user/unix/userinfo.lo   -lrt -lcrypt  -lpthread -ldl
    libtool: link: you must specify an output file
    libtool: link: Try `libtool --help --mode=link' for more information.
    make[1]: *** [libapr-.la] 错误 1

    错误原因

      因为我自己linux服务器的DNS出了问题,不能wget下载。我就在windows上下载完软件包后为了偷懒就直接在windows上解压后,直接上传文件夹到linux上安装,这样就导致了上传文件夹中所有的可执行文件变成不可执行了。

      而诱发这个报错的主要就是build/get-version.sh 脚本无法执行,获取libtool的版本时候失败,从而导致build/apr_rules.mk(此文件是./configure配置时调用前面的sh脚本生成的,由于解压后上传脚本没有可执行权利)中libtool的 $LINK 选项中有个 -version-info(apr-0.9.20版本是这样,我这还有个apr-1.4.6版本这个选项被换成了变量:$(LT_VERSION),这个变量在../Makefile中能找到) 后面的版本为空而正常情况下我的0.9.20版本显示是:-version-info 9:20:9  

      所以出现这个报错:你最好确定下生成libtool配置文件中的version-info后面是否为空!

    解决原因:

      要么从LINK中删除-version-info的标志,这也算歪门邪道吧,不推荐~~~所以还是把解压包到linux下解压重新安装吧。

    这样敲响了个警钟,linux下安装和配置东西,最好还是在linux下解压,不要到windows解压成文件夹后上传!!!

    解决思路:

       当时出现问题时既然是libtool报错you must specify an output file

    1.首先我肯定跑到libtool脚本去查找这句代码:

        case $output in
        "")
          $echo "$modename: you must specify an output file" 1>&2

     但libtool代码还是还有多,加之也不是很熟悉shell脚本。看的有点晕,跟不出什么结果。。

    2.既然是make的时候报错,而且错误码还包含了:link  gcc -g ,所以就去查找Makefile文件,Makefile文件包含build/apr_rules.mk。进去后果然发现在这边libtool的link,但由于对libtool也不是很了解,所以下午又花了一下午时间了解libtool(http://www.cnblogs.com/samurail/archive/2013/04/27/3047569.html),跟着这篇文件操作完后我进行手动排错了,因为是libtool的link报错,而那篇文件进行link是:libtool --mode=link gcc -o libcompress.la compress.lo -rpath /tmp -lz,我就改成apr的link选项:gcc -g -O2 -pthread -DHAVE_CONFIG_H -D_REENTRANT -D_GNU_SOURCE  -version-info -o libapr-.la -rpath /usr/local/apr/lib compress.lo,然后一个一个选项的删就排查到了version-info的问题。

      至于versin-info为什么会导致这个报错的原因我现在也还没弄的很明白,这里(http://www.sourceware.org/autobook/autobook/autobook_91.html)有version-info的说明,有空在研究吧。autobook的中文版:http://blog.csdn.net/chaolumon/article/details/3763451,不过貌似还没翻译到libtool这章来。

  • 相关阅读:
    Python数据分析(一)pandas数据切片
    回归分析
    C# + ArcEngine 常用方法(不定时更新)
    安卓11配置谷歌FCM推送报错
    VUE开发之异常篇
    C#编程之“串口通讯多次接收”
    关于swift使用CocoaPods倒入三方库的framework后父类倒入子类无法继承的问题
    warning: directory not found for option“XXXXXX” 解决方案
    关于获取tableView中cell数据的处理
    怎么处理使用UINavigation(导航控制器时) UIScrollView及其子类UITableView、UICollectionView可能出现的向下偏移64Px或者顶部对齐等问题
  • 原文地址:https://www.cnblogs.com/samurail/p/3048314.html
Copyright © 2020-2023  润新知