我用gcc和ar这样构建自己的静态库。
g++ \
... list of library sources ... \
... a lot of -L -l -I -D options etc... \
-c \
&& ar crf ./lib/libpackager.a *.o
然后我在我的应用中使用此库。目前,我是这样构建的。
g++ \
myApp.cpp \
... same -L -l -I options as in library ... \
-L. -lpackager \
-o myApp
[可行,但是我对我有点奇怪,我在构建应用程序时需要复制所有-l
和-L
。是否可以在库中包含所有这些库依赖项。我的目标是构建这样的应用。
g++ myApp.cpp -L. -lpackager -o myApp
将评论转移到答案中。
编译目标文件时指定-l
和-L
操作无关紧要。 GCC的某些版本会警告不会使用的参数,因为它们是链接时参数,当包含-c
标志时,将不会使用链接。
ar
命令不知道如何处理C编译器的-l
和-L
参数(它可能对标志有自己的用途; ar
的一种版本接受但忽略-l
) 。
因此,当您与静态库链接时,必须指定依赖项。自70年代初以来,生活就是这样-这个方面尚未改变。可以使用依赖项信息来构建共享库,但不能使用静态库来构建。
据我所知,我需要构建一个共享库并以静态方式链接它,对吧?
没有您要么需要构建一个共享库并将其链接为共享库,要么需要接受使用静态库的意思,即使用该库时需要在命令行上指定其他库。有一些系统可以帮助管理此类信息; pkg-config
就是这样的一种。 AFAIK,您不能以“静态方式”链接共享库。