我使用过这个命令。
libtool --mode = compile gcc -g -o -c foo.c
命令后实际输出应如下所示:
$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
但是观察到的输出是
$libtool --mode=compile gcc -g -O -c foo.c
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.
.libs目录未创建。我必须做出任何改变
答案 0 :(得分:0)
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'中有条件代码),可以使用-no-suppress选项关闭抑制到libtool的编译模式:
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$
我希望这会有所帮助。
谢谢&问候,
阿洛克