代码之家  ›  专栏  ›  技术社区  ›  flashdisk

如何消除这个链接错误?

  •  0
  • flashdisk  · 技术社区  · 10 年前

    我正在尝试编译一些文件,这很好,但当我尝试按如下方式链接它们时,我收到了一个错误:

    Building target: EoCu
    Invoking: GCC C++ Linker
    g++ -L"/home/workspace/production-Alginterface/Shared/libs" -m32 -g -rdynamic  -Wl,-rpath-link=../../production-Alginterface/Shared/libs -g -rdynamic -o "EoCu"  ./simpleini/ConvertUTF.o ./simpleini/snippets.o  ./Tinyxpath/action_store.o ./Tinyxpath/htmlutil.o ./Tinyxpath/lex_util.o ./Tinyxpath/node_set.o ./Tinyxpath/tinystr.o ./Tinyxpath/tinyxml.o ./Tinyxpath/tinyxmlerror.o ./Tinyxpath/tinyxmlparser.o ./Tinyxpath/tokenlist.o ./Tinyxpath/xml_util.o ./Tinyxpath/xpath_expression.o ./Tinyxpath/xpath_processor.o ./Tinyxpath/xpath_stack.o ./Tinyxpath/xpath_static.o ./Tinyxpath/xpath_stream.o ./Tinyxpath/xpath_syntax.o  ./AlarmsMsg.o ./AppWatchDog.o ./BaseIteration.o ./CommunicationManager.o ./ConfigValidator.o ./FilesMng.o ./GuiInputHandler.o ./GuiManager.o ./IniReader.o ./IniWriter.o ./MessageBuilder.o ./MngFile.o ./MsgBroker.o ./NetworkDisconnectTimerCallable.o ./ShareDialog.o ./SpoIteration.o ./TCPServer.o ./Timer.o ./TimerCallable.o ./TrendsRecorder.o ./TrendsUtlFunc.o ./XMLBuilder.o ./XMLParser.o ./actmgr.o ./cdlCom.o ./entry.o ./ioctrl.o ./iteration.o ./msgqueue.o ./prmdb.o ./qthread.o ./usbDrive.o   -lrt -llog4cxx -lapr-1 -laprutil-1 -lexpat -lpthread
    

    当我通过eclipse编译和运行时,我已经输入了正确的库,它工作得很好,但是当我通过make文件进行编译时,我得到了这个错误,尽管它是相同的make文件!,有人能帮我吗?

    /usr/bin/ld: warning: libexpat.so.0, needed by /home/workspace/production-Alginterface/Shared/libs/libaprutil-1.so, not found (try using -rpath or -rpath-link)
    

    提前感谢。

    1 回复  |  直到 10 年前
        1
  •  2
  •   cnicutar    10 年前

    很可能eclipse正在使用不同的工作目录 rpath-link 具有不同的含义:

    -Wl,-rpath-link=../../production-Alginterface/Shared/libs
                    ^^^^^^
    

    请尝试改用绝对路径。


    如果您已经指定,为什么需要执行此操作 -L 在gcc的命令行上?从…起 ld(1) 我猜会在一个单独的路径中搜索您的其他共享库所需的共享库。

    在这种情况下,您需要 libaprutil-1.so 因为你与 -laprutil-1 。需要的是libaprutil libexpat.so.0 rpath链路 搜索的路径是 ld .