CMake:使用gcc正确链接系统库

我有一个依赖于数学库的静态libary mylib.

如果我首先将mylib与math连接,然后链接到我的可执行文件,它可以工作:

add_executable(myapp main.c)
target_link_libraries(mylib m)
target_link_libraries(myapp mylib)

但是,如果我直接使用可执行文件进行链接,则在使用gcc时会失败(使用clang可以正常工作!)

add_executable(myapp main.c)
target_link_libraries(myapp m mylib)

为什么这有什么不同?
我认为无论如何将库连接在一起是不可能的?

使用cmake的target_link_libraries时,并不意味着您将链接任何内容.它宁可在目标和类型/动作链接库之间创建依赖关系.

我想第一个例子的实际构建行会产生类似的结果:

gcc -o myapp myapp.o -lmylib -lm

第二个

gcc -o myapp myapp.o -lm -lmylib

.如果mylib引用了m,则第二个示例(可能)不链接.

尝试运行make VERBOSE = 1并研究链接过程的命令行,以真正了解正在发生的事情. clang的链接器可能是智能的,并且在链接过程中实际删除库之前等待所有调用被链接.

相关文章
相关标签/搜索