Я написал проект с использованием 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
- with
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
- with
- Use
CMAKE_EXE_LINKER_FLAGS
- with
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"
- with
- Используйте
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
, компилятор сообщит мне аналогичный результат.
Кто-нибудь может мне помочь? Добавляет ли ссылку флаг с какой-либо ошибкой?