链接:致命错误LNK1181:无法打开输入文件'\ machine:x64.obj'

时间:2016-10-20 13:49:26

标签: c++ windows linker 64-bit

我正在移植一个我已经工作了2年的C ++项目到Windows,我正面临这个链接问题,我在任何google引用的帖子上都没有看到......:/

这是一个CMake生成的项目,我将这些CMake条目默认设置为“\ machine:x64”

CMAKE_EXE_LINKER_FLAGS
CMAKE_MODULE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS

我尝试删除该标志,这对最后3个条目中的任何一个都没有影响,但是没有此值的CMAKE_EXE_LINKER_FLAGS会在我的库中传播大约85个未解析的外部因素。

我的所有项目/项目依赖项都是使用x64中的MSVC2015编译的。 在调试和调试中链接都失败了发布模式(不重要..)

我还应该提一下,我在这个解决方案中有6个项目,4个库,2个可执行文件。其中4个项目编译正常(1个可执行文件和4个库),只有最后2个项目失败(两者都有相同的链接错误)。

依赖关系方面的唯一区别是对Point Cloud Library(pcl)和Qt5(Core GUI,XML和OpenGL)的依赖

有没有人遇到过这个特定的链接器错误?

希望你能帮忙=)

编辑:以下是两个主要的CMakelists文件(项目根目录的文件和编译两个失败项目的文件)。我删除了所有与此问题无关的内容。

Root CMakeLists.txt:

project(SofaOR)
cmake_minimum_required(VERSION 2.4)
if (COMMAND cmake_policy)
  cmake_policy(SET CMP0003 NEW)
endif(COMMAND cmake_policy)

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)

include_directories(${CMAKE_SOURCE_DIR})

#Reading local file for the non automatically detected dependencies
if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/cmake/dependencies.cmake")
    message("Adding custom file")
    include(${CMAKE_CURRENT_LIST_DIR}/cmake/dependencies.cmake)
endif()

include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
elseif(COMPILER_SUPPORTS_CXX0X)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
else()
    message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()

set(SOFA_ALL_LIBS SofaHelper SofaDefaultType)
set(SOFA_INCLUDE_DIRS ${SOFA_DIR}/include)
set(SOFA_LIBRARY_DIRS ${SOFA_DIR}/lib)

add_subdirectory(${CMAKE_SOURCE_DIR}/processOR)

最后一个add_subdirectory包含的CMakelists:

project(processOR)

cmake_minimum_required(VERSION 3.0.2)
if (COMMAND cmake_policy)
  cmake_policy(SET CMP0003 NEW)
endif(COMMAND cmake_policy)

set(PROCESSOR_EXEC_NAME processOR)
set(PROCESSOR_LIB_NAME processOR_lib)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

find_package(OpenCV COMPONENTS core imgproc xfeatures2d calib3d REQUIRED )
find_package(Qt5 COMPONENTS Core Gui Xml OpenGL REQUIRED )
find_package(PCL COMPONENTS common io kdtree REQUIRED )
find_package(Boost COMPONENTS program_options chrono thread REQUIRED)
find_package(OpenIGTLink REQUIRED )

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)

set(PROCESSOR_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/src/ PARENT_SCOPE)
set(PROCESSOR_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/)

include_directories(${PCL_INCLUDE_DIRS})
include_directories(${COMMON_INCLUDE_DIRS})
include_directories(${OpenIGTLink_INCLUDE_DIRS})
include_directories(${OpenCV_INCLUDE_DIRS})
include_directories(${QGLVIEWER_DIR})
include_directories(${Boost_INCLUDE_DIRS})
include_directories(${SOFA_INCLUDE_DIRS})

link_directories(${PCL_LIBRARY_DIRS})
link_directories(${COMMON_LIBRARY_DIRS})
link_directories(${OpenIGTLink_LIBRARY_DIRS})
link_directories(${OpenCV_LIBRARY_DIRS})
link_directories(${QGLVIEWER_DIR})
link_directories(${SOFA_LIBRARY_DIRS})
link_directories(${Boost_LIBRARY_DIRS})

include_directories(${PROCESSOR_SRC})

set(PROCESSOR_ALL_LIBS
    ${PCL_LIBRARIES}
    ${COMMON_LIBRARIES}
    OpenIGTLink
    ${OpenCV_LIBS}
    QGLViewer 
    ${Boost_LIBRARIES}
    ${SOFA_ALL_LIBS}
)

set (HEADER_FILES
  ${PROCESSOR_SRC}/util/Calibration.h
  ${PROCESSOR_SRC}/fetchers/VideoFetcher.h
  […]
  ${PROCESSOR_SRC}/filters/PointCloudTriangulator.h
  ${PROCESSOR_SRC}/filters/PointCloudSmootherMLS.h
  ${PROCESSOR_SRC}/filters/PointCloudSegmenter.h
  ${PROCESSOR_SRC}/filters/PointCloudDownSampler.h
  )

set (SOURCE_FILES
  ${PROCESSOR_SRC}/Registrator.cpp
  ${PROCESSOR_SRC}/tinyxml2.cpp
  […]
  ${PROCESSOR_SRC}/filters/PointCloudSegmenter.cpp
  ${PROCESSOR_SRC}/filters/PointCloudDownSampler.cpp
  )

# Library
add_library(${PROCESSOR_LIB_NAME} SHARED ${HEADER_FILES} ${SOURCE_FILES})
target_link_libraries(${PROCESSOR_LIB_NAME} ${PROCESSOR_ALL_LIBS} ${CMAKE_EXE_LINKER_FLAGS} ${ADDITIONAL_LIBRARIES})
QT5_USE_MODULES(${PROCESSOR_LIB_NAME} Widgets Gui OpenGL Xml)

set(PROCESSOR_LIB ${PROCESSOR_LIB_NAME} PARENT_SCOPE)

# Main executable
set (SOURCE_FILES
  ${PROCESSOR_SRC}/mainRegistration.cpp
  )
add_executable(${PROCESSOR_EXEC_NAME} ${HEADER_FILES} ${SOURCE_FILES})

target_link_libraries(${PROCESSOR_EXEC_NAME} ${PROCESSOR_LIB} ${Boost_LIBRARIES} ${PROCESSOR_LIB_NAME} ${CMAKE_EXE_LINKER_FLAGS})
QT5_USE_MODULES(${PROCESSOR_EXEC_NAME} Widgets Gui OpenGL Xml)

set_target_properties(${PROJECT_NAME}
  PROPERTIES
  RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
  )

0 个答案:

没有答案