libs目录不是在libtool中自动创建的

时间:2013-09-10 07:15:36

标签: linux libtool

-->

我使用过这个命令。

  

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

1 个答案:

答案 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$

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

相关问题
最新问题