我遇到了一个由CMake
引起的多重定义链接问题,这是一个依赖于包含静态库的共享库的可执行文件。
我创建了一个名为foo
的共享库,它依赖于静态库bar
。
add_library(foo SHARED foo.cpp)
target_link_libraries(foo bar)
根据定义,
bar
的内容位于库 foo
中。
然后我创建了一个依赖于 foo
的可执行文件 exe
。add_executable(exe exe.cpp)
target_link_libraries(exe foo)
在链接时,我收到一个“多次定义”警告/错误,告诉我库“bar”中的函数出现了两次。查看链接命令时,我发现“exe”与“bar”和“foo”链接在一起,这是不一致的。
在依赖声明中是否有遗漏?我错过了一个神奇的“CMake”关键字吗?