[英]CMake project compiling fine SHARED libs but not with STATIC libs
我有一个工作项目(P1),其中的EXE调用了STATIC lib。 它可以在Windows,MAC和Linux上很好地编译和执行。
现在,我有另一个项目(P2),其中一个EXE调用了STATIC库,该EXE也调用了另一个STATIC库。 在这种情况下,它可以在WINDOWS和MAC上正常工作,但在Linux上,链接时找不到很多参考。 我检查了:
我绝望了,我只是将库从STATIC切换到SHARED。 现在,它在Linux上可以正常编译。 基本上,我只是将add_library(lib STATIC ...)
更改为add_library(lib SHARED ...)
,现在一切正常。
我不知道为什么这在SHARED中有效,但在STATIC中无效。
谢谢你的帮助。 最好的祝福。
当您的静态库A依赖于另一个静态库B时,在创建A时不会解决此依赖关系,而是在您将可执行文件与A链接时。只有这样,链接器才需要B来解析A所需的符号(取决于您对A的使用情况)一种)。
我现在无法找到任何关于此的详细信息,但我强烈认为Visual Studio(或与CMake结合使用)会自动添加这些库,因此它可以在Windows上运行。 在Linux上,您需要将B显式添加到链接库中,以便成功链接可执行文件。
当创建共享库A时,来自B的所有符号都会在创建B的过程中被解析(因此链接器实际上会从B查找所需的内容)。 因此,当您切换到共享库时,您的示例有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.