我有一个在调试模式下编译的静态库(openexr.lib)。我试图将此库链接到我使用CMake创建的项目。这是我的文件夹结构。
+-- myproject
| +-- Demo
| +-- build
| +-- libraries
| +-- openexr.lib
| +-- cmake
| +-- GenerateVS2015.bat
| +-- CMakeLists.txt
| +-- Demo.cpp
| +-- stdafx.cpp
因此,您可以看到我在libraries目录中有 openexr.lib 。我已经验证此.lib文件已编译为静态库,文件大小约为64mb。然后,我有一个批处理文件,可以在cmake目录中找到,它试图构建项目。这是我的批处理脚本的样子。
@echo off
set startingDir=%CD%
set basepath=%~dp0
set builddir=%basepath%\..\build
if exist %builddir% (@RD /S /Q %builddir%)
mkdir %builddir%
cd %builddir%
cmake -G "Visual Studio 14 2015 Win64" .. %*
cd %startingDir%
所以,这基本上创建了构建目录,如果它还没有存在(否则它会清除它以便它可以重新填充所有内容)。然后,它使用visual studio generator选项调用cmake命令。
现在,这是我的CMakeLists.txt文件中的内容:
CMAKE_MINIMUM_REQUIRED (VERSION 2.8)
PROJECT (MyProject)
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
ADD_DEFINITIONS(-DBUILD_DLL)
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} xmllite.lib")
string(REGEX REPLACE "/bin/[^/]*$" "" VCINSTALLDIR "${CMAKE_C_COMPILER}")
message(STATUS "Guessed MSVC directory: ${VCINSTALLDIR}")
ENDIF()
ADD_LIBRARY(openexr STATIC IMPORTED GLOBAL)
SET_TARGET_PROPERTIES(openexr PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/libraries/openexr.lib)
ADD_EXECUTABLE(MyDemo ${CMAKE_CURRENT_SOURCE_DIR}/Demo.cpp ${CMAKE_CURRENT_SOURCE_DIR}/stdafx.cpp)
TARGET_LINK_LIBRARIES(MyDemo openexr)
当我运行我的批处理文件时,它会正确生成MyDemo.vcxproj文件。我可以看到它的设置使用目标扩展名.exe进行编译(这就是我想要的)。但是,当我尝试构建项目时,我收到以下错误消息:
C:\myproject\build\Debug\MyDemo.exe : fatal error LNK1120: 78 unresolved externals
如果我打开我的演示项目的属性页面,我可以在链接器部分下看到尝试链接到我的openexr.lib文件。
但是,由于某种原因,每次我尝试构建可执行文件时它都会继续失败。任何人都可以提供理由吗?
修改 以下是完整错误日志的链接,如果它有帮助:errorlog.txt