cpptask在gcc命令行中对静态库的排序

时间:2010-03-20 02:17:31

标签: c++ c ant

如何强制cpptask将静态库移动到发送给编译器的arg列表的末尾?

这是我正在使用的条款

   <cpptasks:cc description="appname" subsystem="console" objdir="obj" outfile="dist/app_test">
            <compiler refid="testsslcc" />      
            <linkerarg value="-L${libdir}" />   
            <linkerarg value="-L/usr/local/devl/lib" />
            <linkerarg value="-Wl,-rpath,../lib" />
            <libset libs="unittest ${libs} dsg readline ncurses gcov" />
            <fileset dir="test/obj" includes="main.o" />
            <fileset dir="." includes="${TCFILES}" />
            <fileset dir="../lib" includes="libboost_thread.a libboost_date_time.a" />                                                     
    </cpptasks:cc> 

执行此操作时,libboost_thread.a libboost_date_time.a是传递给编译器的参数列表中的第一个文件,

gcc -ggdb -Wl,-export-dynamic -Wshadow -Wno-format-y2k  \
    ../../lib/libboost_date_time.a ../../lib/libboost_thread.a x.cpp ...

导致编译器错误。通过手动将它们移动到参数列表的末尾,应用程序可以无错误地编译。

gcc -ggdb -Wl,-export-dynamic -Wshadow -Wno-format-y2k x.cpp ... \
    ../../lib/libboost_date_time.a ../../lib/libboost_thread.a  

是的,我尝试更改xml中的顺序,当然这不起作用。现在我使用exec任务以正确的顺序调用gcc文件,但这当然是一个黑客。

1 个答案:

答案 0 :(得分:0)

尝试将存档中的fileset更改为libset