如何强制静态库包括其依赖项?

问题描述 投票:0回答:1

我用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
gcc compilation static-libraries ar
1个回答
1
投票

将评论转移到答案中。

编译目标文件时指定-l-L操作无关紧要。 GCC的某些版本会警告不会使用的参数,因为它们是链接时参数,当包含-c标志时,将不会使用链接。

ar命令不知道如何处理C编译器的-l-L参数(它可能对标志有自己的用途; ar的一种版本接受但忽略-l) 。

因此,当您与静态库链接时,必须指定依赖项。自70年代初以来,生活就是这样-这个方面尚未改变。可以使用依赖项信息来构建共享库,但不能使用静态库来构建。

据我所知,我需要构建一个共享库并以静态方式链接它,对吧?

没有您要么需要构建一个共享库并将其链接为共享库,要么需要接受使用静态库的意思,即使用该库时需要在命令行上指定其他库。有一些系统可以帮助管理此类信息; pkg-config就是这样的一种。 AFAIK,您不能以“静态方式”链接共享库。

© www.soinside.com 2019 - 2024. All rights reserved.