gcc命令行中静态库的cpptask排序
Posted
技术标签:
【中文标题】gcc命令行中静态库的cpptask排序【英文标题】:cpptask ordering of static libraries in gcc command line 【发布时间】:2010-03-20 02:17:30 【问题描述】:如何强制 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 文件,但这当然是一个 hack。
【问题讨论】:
Ant生成的gcc命令行是怎么得到的? 【参考方案1】:尝试将带有存档的fileset
更改为libset
。
【讨论】:
以上是关于gcc命令行中静态库的cpptask排序的主要内容,如果未能解决你的问题,请参考以下文章