zoukankan      html  css  js  c++  java
  • 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这章来。

  • 相关阅读:
    nullnullConnecting with WiFi Direct 与WiFi直接连接
    nullnullUsing WiFi Direct for Service Discovery 直接使用WiFi服务发现
    nullnullSetting Up the Loader 设置装载机
    nullnullDefining and Launching the Query 定义和启动查询
    nullnullHandling the Results 处理结果
    装置输出喷泉装置(贪心问题)
    数据状态什么是事务?
    停止方法iOS CGD 任务开始与结束
    盘文件云存储——金山快盘
    函数标识符解决jQuery与其他库冲突的方法
  • 原文地址:https://www.cnblogs.com/samurail/p/3048314.html
Copyright © 2011-2022 走看看