1 报错
libmylib.a(lib.cpp.o):(.bss+0x0): `gdata::IMGLIST[abi:cxx11]'被多次定义
CMakeFiles/Test.dir/main.cpp.o:(.bss+0x0):第一次在此定义
2 解决办法
原因:错误信息中的gdata::IMGLIST[abi:cxx11]
被多次定义,可能在多个源文件中包含了一个头文件(.h文件)。
方法:如果工程由“main.cpp,lib.cpp,lib.b”构成,main.cpp中“#include "lib.h”。可以将“lib.cpp”编译成动态库即可解决:
file(GLOB SRCS lib.cpp)
add_library(mylib SHARED ${SRCS})add_executable(${PROJECT_NAME} ${PROJECT_SOURCE_DIR}/main.cpp)
target_link_libraries(${PROJECT_NAME} mylib ${LIBS})
注意:
1 要将main.cpp单独编译,将其他文件编译成动态库文件,然后进行链接。
2 不能将所有“.cpp、.c文件”一次编译成可执行文件,也不能将除main.cpp以外的.cpp文件编译成静态库。