我在我的CMakeLists.txt文件中指定了源文件的共享库构建,如下所示:
# Library setup
file(GLOB_RECURSE SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/Source/*.cpp)
file(GLOB_RECURSE HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/Source/*.h)
源目录中包含构建共享库所需的所有.h和.cpp文件。所以我接着这样做:
add_library(mylibrary SHARED ${SOURCES} ${HEADERS} )
我之后也会将一堆其他.libs与mylibrary链接起来(可能存在冲突问题吗?)。当我尝试构建mylibrary时出现问题。我收到链接错误,例如:
Severity Code Description Project File Line Suppression State
Error LNK2001 unresolved external symbol __imp_cosf mylibrary ***.obj 1
即使符号是在我包含的源文件中定义的。我不确定该怎么做才能让我的项目找到那些符号。有趣的是,当我构建为静态库时,它很好。但是,当我尝试构建动态库时,会出现这些错误。
答案 0 :(得分:0)
所以,我不确定为什么会这样。但是在链接到MSVRCT和libcmt之间存在冲突警告。它在输出日志中说了这样的话:
Resolving LNK4098: defaultlib 'MSVCRT' conflicts with ...
这是因为libcmt是用于发布版本的静态库,并使用\ MT标志。 MSVRCT是一个发行版DLL,并使用\ MD标志进行编译。由于这种冲突,我不得不将我的编译器标志更改为:
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
然后能够找到符号。如果有人对此工作原因有任何意见/更正请添加。