【发布时间】:2022-07-29 15:47:32
【问题描述】:
我有一个项目,其中包含一个共享库(引擎)和一个可执行文件(游戏)。尽管如此,我的引擎正在使用其他一些库,如 spdlog。我想知道是否有办法仅将我的共享库与所有其他库链接。
目前,如果我在 Engine 中使用 spdlog(例如创建一个 Log 类),然后在游戏中使用这个 Log 类。我还需要在游戏中链接spdlog。
所以我想知道是否有一种方法可以将这些库“嵌入”到我的共享库中以避免所有这些链接到我的 exe 中?
顺便说一句,我在多个平台上使用clang,目前是windows和linux。
【问题讨论】:
-
共享/动态库是一个单独的链接实体,很像可执行程序。但是,作为一个单独的实体,与使用该库的可执行文件不同,它的依赖项(共享库链接的库)不会从共享库中导出。如果您需要在自己的共享库和可执行文件中使用第三方库,则需要将该第三方库链接到可执行文件和共享库。
-
也就是说,如果第三方库也是共享库,那么操作系统无论如何只会加载一次。它可能被映射到多个进程,但共享库的一份副本应该在内存中。
-
目前它是一个我想“嵌入”的静态库。但这更多是出于实际原因,它并不妨碍我编码。我要求这样更容易使用。
标签: c++ linker clang shared-libraries static-libraries