繁体   English   中英

如何强制静态库包含它的依赖项?

[英]How to force static library to include it dependencies?

我像这样用 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,您不能以“静态方式”链接共享库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM