http://www.gnu.org/software/libtool/manual/html_node/Creating-object-files.html
在共享库系统上,libtool 通过将适当的 PIC 生成标志插入到编译命令中来自动生成一个附加 PIC 对象:
burger$ libtool --mode=compile gcc -g -O -c foo.c
mkdir .libs
gcc -g -O -c foo.c -fPIC -DPIC -o .libs/foo.o
gcc -g -O -c foo.c -o foo.o >/dev/null 2>&1
burger$
请注意,Libtool 在第一次执行时会自动创建 .libs 目录,其中将存储 PIC 库目标文件。
由于 'burger' 支持共享库,并且需要 PIC 对象来构建它们,所以 Libtool 这次编译了一个 PIC 对象,并在 libtool 对象中记下了它:
# foo.lo - a libtool object file
# Generated by ltmain.sh (GNU libtool) 2.4.2
#
# Please DO NOT delete this file!
# It is necessary for linking the library.
# Name of the PIC object.
pic_object='.libs/foo.o'
# Name of the non-PIC object.
non_pic_object='foo.o'
请注意,GCC 的第二次运行已丢弃其输出。这样做是为了避免令人讨厌地重复编译器警告。如果您需要查看两组警告(例如,您可能在 '#ifdef PIC' 中有条件代码),您可以使用 libtool 编译模式的 -no-suppress 选项关闭抑制:
burger$ libtool --mode=compile gcc -no-suppress -g -O -c hello.c
gcc -g -O -c hello.c -fPIC -DPIC -o .libs/hello.o
gcc -g -O -c hello.c -o hello.o
burger$
我希望这会有所帮助。谢谢和问候,
阿洛克