0

我用过这个命令。

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 目录未创建。我必须做出任何改变

4

1 回答 1

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' 中有条件代码),您可以使用 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$

我希望这会有所帮助。谢谢和问候,
阿洛克

于 2013-09-10T07:42:42.913 回答