我有一个工作项目(P1)与一个EXE调用一个STATIC库。它在Windows,MAC和Linux上编译和运行良好。CMake项目编译罚款SHARED库,但不与静态库
现在,我有第二个项目(P2)与一个EXE调用一个STATIC库也调用另一个STATIC库。在这种情况下,它在WINDOWS和MAC上运行正常,但在Linux上,链接时没有找到大量的引用。我检查:
- 该库存在。确定
- 编译器有权访问它们。好。
- 从P1和P2的CMake文件是相似的。好。
- 编译器标志和命令是相似的。好。
我很绝望,我只是将库从STATIC切换到SHARED。而现在,它在Linux上编译得很好。基本上,我只是将add_library(lib STATIC ...)
更改为add_library(lib SHARED ...)
,现在一切正常。
我没有任何线索为什么这是共享工作,但不是在静态。
感谢您的任何帮助。 此致敬礼。
那么,我会仔细检查,但这两个库都添加到CMake target_link_libraries ...我只是没有任何线索在哪里开始寻找。感谢您的建议! – Korchkidu 2012-03-28 15:37:20
好吧,似乎我必须做一些像target_link_libraries(lib2 lib1)和target_link_libraries(EXE lib1 lib2)...这对你有意义吗? – Korchkidu 2012-03-28 17:12:33
是的,那就是我的意思。您需要将您的可执行文件与_both_静态库链接,因为只有这样lib2才能从lib1中获得所需的符号(如果它们都是静态库,则无法将lib2链接到lib1)。 – 2012-03-29 07:25:29