【发布时间】:2019-09-19 09:50:40
【问题描述】:
我使用 CMake(使用 ninja 和 Visual Studio 2017 C++ 编译器)编写了一个项目,其中包含两个模块 lib_A 和 lib_B
-
lib_B依赖于一个lib_A。 -
lib_B和lib_A都定义了std::vector < size_t >。
最后,编译器告诉我:LNK2005 lib_A: std::vector < size_t > already defined in lib_B
我搜索了答案,他们给出了添加链接标志/FORCE:MULTIPLE、page1和page2的解决方案。
我尝试了所有这些,但它们都不起作用。
-
使用
target_link_libraries- 与
target_link_libraries(lib_B lib_A INTERFACE "/FORCE:MULTIPLE") 编译器告诉我
The INTERFACE, PUBLIC or PRIVATE option must appear as the second argument, just after the target name.与
target_link_libraries(lib_B INTERFACE "/FORCE:MULTIPLE" lib_A )- 编译器告诉我
ninja: error: '/FORCE:MULTIPLE', needed by 'lib_B', missing and no known rule to make it
- 与
- 使用
CMAKE_EXE_LINKER_FLAGS- 与
set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} "/FORCE:MULTIPLE") - 编译告诉我
LINK : warning LNK4012: value “x64;/FORCE:MULTIPLE” is invalid, must be one of "ARM, EBC, HYBRID_X86_ARM64X64, or X86" omit this option"
- 与
- 使用
set_target_properties使用 CMake 代码
get_target_property(TEMP lib_B COMPILE_FLAGS)
if(TEMP STREQUAL "TEMP-NOTFOUND")
SET(TEMP "") # Set to empty string
else()
SET(TEMP "${TEMP} ") # A space to cleanly separate from existing content
endif()
# Append our values
SET(TEMP "${TEMP} /FORCE:MULTIPLE" )
set_target_properties(lib_B PROPERTIES COMPILE_FLAGS ${TEMP} )
编译器告诉我cl: command line error D8021 : invalid parameter "/FORCE:MULTIPLE"
如果我将/FORCE:MULTIPLE 更改为-Wl,--allow-multiple-definition,编译器会告诉我类似的结果。
谁能帮帮我? 添加链接标志是否有任何错误?
【问题讨论】:
标签: windows visual-studio cmake compiler-flags ninja